Software ético
Ensayo

Software ético

Osama Alghanmi · 29 de septiembre de 2026

Imagina un mundo en el que el comportamiento de cualquier aplicación o sistema esté definido de forma explícita y se pueda compartir con sus usuarios. Un chatbot no puede enviar tus datos privados a un servidor externo a menos que tú lo digas. Una aplicación de redes sociales no puede mostrarle a tu hijo o a tu hija contenido dañino. ¿Cómo podemos hacer algo así? ¿Es siquiera posible? Yo sostengo que sí.

Hoy esto se especifica en los términos y condiciones, o cuando aceptas esas molestas ventanas emergentes con las que cada sitio web recoge tus cookies. Dice algo así como: enviamos estos datos a algunos de nuestros «socios». ¿Y quiénes son esos socios, amigo?

¿Y si todo lo que hace un software o un sistema se declarara como un contrato público que todo el mundo puede leer? Alguien dirá: ¡así funciona el código abierto! Por desgracia, no es así. Hay un gran malentendido según el cual el código abierto significa que cualquiera puede leer el código y entender su comportamiento cuando se está ejecutando. Piénsalo así: el código abierto es como un coche en el concesionario. Nadie puede predecir qué hará con él su conductor. Puede ser un operador neutral o uno dañino.

Lo que necesitamos es una forma explícita de decirles a los usuarios de nuestro software exactamente cómo se comporta cuando se está ejecutando. Debería ser un contrato vinculante. Eso significa que puedo entender exactamente cómo me afectará este software a mí y a mi familia. Sé lo que estoy aceptando. Quizá pueda usar mis propias herramientas (tal vez tu agente de IA) para leer este software y preguntarle cosas como: ¿este software es adecuado para mi hijo o no?

Hoy esta exigencia está centralizada en los organismos de auditoría. Pero las empresas son hábiles para esquivarlos y pasar por encima de ellos, y jugarán al juego legal con el público. Las consecuencias llegan ahora a través de demandas colectivas y cosas parecidas. Es un camino largo y agotador para las sociedades, y no es posible en todas. Cada país tiene sus leyes y es difícil hacer cumplir por separado la ley y la ética de cada sociedad.

He intentado crear esto en mi lenguaje de programación, Orb. Puedes observar quién puede leer tus datos y si salen de los límites del sistema.

Tomemos este fragmento de código:

orbital SocialOrbital { entity Person [persistent: people, identity] { id : string! @key name : string! external : "allowed" | "blocked" = blocked } entity Post [persistent: posts] { @read ["=", (object/get @entity authorId) @user.id] @update ["=", (object/get @entity authorId) @user.id] id : string! @key authorId : Person text : string! } entity Share [persistent: shares] { @read (or ["=", (object/get @entity recipientId) @user.id] ["=", (object/get @entity sharerId) @user.id]) id : string! @key postId : Post sharerId : Person recipientId : Person } trait PostSharing -> Share [lifecycle] { initial: idle state idle { INIT -> idle SHARE_WITH_FRIEND -> idle (persist create Share { postId: ?postId, sharerId: @user.id, recipientId: ?friendId }) SEND_OUTSIDE -> idle when (= @user.external "allowed") (call-service "webhook" "send" { url: "https://example.com/hook", event: "post.shared" } { emit: { success: TRACKED, failure: FAILED } }) TRACKED -> idle FAILED -> idle (render-ui toast { type: "alert", variant: "error", message: "Could not send" }) } listens { SHARE_WITH_FRIEND { postId: string, friendId: string } } emits { TRACKED -> external { postId: string } FAILED -> internal { postId: string } } } page "/shares" -> PostSharing }

Esto representa un bloque de código autocontenido (yo los llamo comportamientos) que se ocupa de las publicaciones. No hay ningún otro fragmento de código en el sistema que se ocupe de las «publicaciones». Puedes pensar en una entrada de blog o en una publicación de una red social, da igual. Al leerlo puedo decidir si acepto este «comportamiento» de un sistema que estoy usando.

Si observamos estas líneas:

entity Person [persistent: people, identity] { id : string! @key name : string! external : "allowed" | "blocked" = blocked } entity Post [persistent: posts] { @read ["=", (object/get @entity authorId) @user.id] @update ["=", (object/get @entity authorId) @user.id] id : string! @key authorId : Person text : string! } entity Share [persistent: shares] { @read (or ["=", (object/get @entity recipientId) @user.id] ["=", (object/get @entity sharerId) @user.id]) id : string! @key postId : Post sharerId : Person recipientId : Person }

Representan dónde viven los datos y cómo se accede a ellos. Hay tres tablas en la base de datos: Person, Post y Share. Definen exactamente cómo se lee y se actualiza cualquier publicación que yo comparta. Por ejemplo, solo mis amigos pueden ver esta publicación:

@read (or [”=”, (object/get @entity recipientId) @user.id] [”=”, (object/get @entity sharerId) @user.id])

Ahora mira esta parte:

SHARE_WITH_FRIEND -> idle (persist create Share { postId: ?postId, sharerId: @user.id, recipientId: ?friendId }) SEND_OUTSIDE -> idle when (= @user.external "allowed") (call-service "webhook" "send" { url: "https://example.com/hook", event: "post.shared" } { emit: { success: TRACKED, failure: FAILED } })

El sistema te dice exactamente adónde envía datos a sistemas externos y cuándo. No quiero entrar en los detalles del código, pero SEND_OUTSIDE especifica aquí lo que ocurre cuando el sistema está a punto de enviar tus datos a un sistema externo (solo cuando tú lo has aceptado). Está explícito en el código. Y ese código se comparte con el cliente.

Deberíamos normalizar ser explícitos sobre qué software usamos y qué hace con nuestros datos y nuestra información. Esto, en mi opinión, puede servir tanto a las empresas grandes como a las pequeñas. Las empresas pequeñas pueden atender las necesidades de sus comunidades locales y prosperar siendo explícitas. También puede distinguirlas de las grandes. A su vez, se puede presionar a las grandes empresas para que sean más responsables y explícitas sobre cómo manipulan nuestros datos.

Una salvedad: dirán que esto es inseguro, que no podemos hacerlo con todos los sistemas. Estoy de acuerdo. Pero las redes sociales, los chatbots y muchos otros no son, desde luego, sistemas «sensibles». Especificar el comportamiento de su software no les supone ningún riesgo.

Si pensamos un poco más allá, en la era tecnológica que viene el software se va a convertir en un bien común que cualquiera puede construir. Los grandes actores de la IA tendrán acceso a cantidades enormes de datos y, si no somos explícitos sobre cómo se comparten y se manipulan esos datos, tendremos problemas. Deberíamos tener criterio, elegir lo que es bueno para nosotros y evitar el código y los sistemas dañinos.

Si te interesa saber más sobre Orb, puedes visitar orb.almadar.io. Es de código abierto.

Publicado por primera vez en Substack.

Osama Alghanmi

El conocimiento es libertad. Los sistemas deben estar abiertos a las personas a las que gobiernan.

© 2026 Osama Alghanmi. Liubliana, Eslovenia.