Amassando ideas

Dentro de la comunidad de programación competitiva existen varias guías acerca de como mejorar y prepararse resolviendo problemas. Esta pequeña guía pretende hacer algo distinto, una lista de comprobación de cosas que hacer antes y durante una competencia de programación.

Antes del contest

  • No tener hambre ni sed
  • No tener ganas de ir al baño
  • Tener agua u otro bebestible a mano
  • Tener snacks a mano por si me de hambre
  • Entrar a Codeforces (o el sitio donde se aloje la competencia) e iniciar sesión.
  • Abrir un archivo de texto para cada problema con la plantilla a usar para la competencia
  • Abrir emulador de terminal en el directorio asignado para la competencia
  • Abrir esta lista de comprobación

Al resolver un problema

  • Leer el enunciado cuidadosamente
  • Determinar exactamente qué es lo que tiene que hacer el programa (matemáticamente si es posible)
  • Comprobar límites de la entrada, de tiempo y de memoria

Encontrar la solución

  • Buscar patrones (programación dinámica, búsqueda binaria, grafos, etc)
  • Reducir a casos sencillos

Implementar la solución

  • Escribir grandes pasos
  • Escribir el código
  • Probar con los casos de ejemplo
  • Probar con pequeños casos borde

Si da Wrong Answer

  • Probar con distintos casos de prueba en los que conozcamos la salida esperada. Si son grandes, generar los casos con números aleatorios y comparar nuestro programa con una solución de búsqueda exhaustiva
  • Inspeccionar el código en busca de errores
  • Intentar demostrar la solución
  • Cambiar los ints por long longs por si hay un overflow escondido.
  • Si todo lo anterior falla, implementar la solución de una forma diferente
  • Si aún así nada funciona, cambiar de problema.

Si da TLE/MLE

  • Reducir constantes
  • Hacer pequeñas optimizaciones (arrays en vez de vectores, uso de variables globales, etc)
  • Si aún así nada funciona, cambiar de problema.

Si da RE

  • Fijarse en los subíndices de los arrays y vectores
  • Evitar divisiones por 0
  • Si todo lo anterior falla, implementar la solución de una forma diferente

Hoy termina mi cuarta semana estudiando en la FCFM. Como prometí que haría, escribiré sobre mi experiencia y mis impresiones de la universidad. El post no está tan estructurado como otros artículos porque lo escribo con menor planificación.

Primeros días

El primer día amanecí antes de las 6AM. Estaba muy emocionado, en contraste con los días previos en los que no tenía ganas de nada. Ordené mis cosas y me dirigí a caminando a la facultad (afortunadamente vivo relativamente cerca).

Como me había levantado temprano, aproveché de pasear por la facultad. Me encantó el edificio antiguo de Beauchef y el patio que tenía adentro. El problema era que no encontraba la sala y llegué un poco tarde a mi primera clase. Tuve que haber intuido que la “G” como la primera letra del nombre de la sala era de “Geología”.

Cerca del mediodía tuve clase en el edificio nuevo. Me gustó el contraste entre ambos edificios aunque no me gustó tanto la idea de tener que salir de la facultad hacia la calle para luego volver a entrar.

En los días siguientes pasaron hartas cosas buenas pero tenía una ensalada de emociones. Conocí en persona a algunos compañeros de programación en el patio. También pude colarme en el DCC (Departamento de Ciencias de la Computación) y sentí que era mi lugar, como que pertenecía ahí. No obstante, me sentía algo irritado y con pocas ganas de esforzarme, lo que hizo que me atrasara en algunos ramos.

Tengo muchos problemas para concentrarme en clase. Mi cerebro se distrae fácilmente pensando en cualquier otra cosa. Últimamente he estado pensando mucho en mi propósito y en cómo aportar de la mejor manera al mundo con algo que me guste. Y parece bastante complicado.

Impresiones de los ramos

Tengo una carga académica normal (30 créditos), pero siento que me quita demasiado tiempo. A continuación los ramos que tomé para este semestre:

Cálculo Avanzado y Aplicaciones

Aquí vemos Cálculo vectorial, Variable Compleja, series de Fourier y ecuaciones en derivadas parciales. Parece que se aplica mucho en física, pero parece una excusa para aplicar lo que vimos en Cálculo en Varias Variables y en Ecuaciones Diferenciales Ordinarias.

Sobre mi desempeño en el ramo, no hemos tenido evaluaciones aún pero voy bastante atrasado y me cuesta entender la materia del apunte.

Inglés 4

Estas clases son como las que tenía en el instituto de idiomas, sólo que esta vez son con más gente. La profesora es chilena pero eso no es un problema para mí. Creo que el nivel que busca que obtengamos es B2 en todo excepto en escritura, pero no estoy completamente seguro.

Introducción a la Física Moderna

Aquí estudiamos ondas, sonido, relatividad, etc. El profesor es algo sarcástico y honestamente no aprendo mucho con él en clase. Afortunadamente los tests son fáciles y me ha ido muy bien en ellos.

Probabilidades y Estadística

El curso está dictado por un profesor que ganó el premio nacional en ciencias exactas. El profesor dio una motivadora primera clase explicando varios casos y situaciones que inspiraron la creación de distintas teorías de probabilidad. Sus clases se basan en copiar texto del pizarrón pero se toma el tiempo de explicar los conceptos. Quiere que preguntemos sobre nuestras dudas pero suele regañar a algun@s que lo hacen, ya sea porque el o la estudiante asume algo que no sale escrito o por otros motivos que no recuerdo. Aún así me cae muy bien.

Proyecto de innovación en Ingeniería y Ciencias

Tod@s parecen odiar este ramo, pero a mi me gusta la idea de aprender cómo aportar a la sociedad mediante la ingeniería. Uno de l@s profesores es muy agradable de escuchar, hace aportes entretenidos e interesantes.

Química

Tod@s parecen odiar este ramo también. Me tocó con un profesor francés y se le nota al hablar, pero eso me agrada. Lamentablemente me fue mal en la primera tarea, pero no sé por qué pues no he visto la corrección. Espero que me la den para la revisión, porque creo que merezco una mejor nota aunque no esté seguro.

Taller de Inducción a Competencias Docentes para Auxiliares

La docencia me llama la atención así que decidí pedirle al CAD que me inscribiera a este ramo para ser auxiliar. Me he imaginado siendo auxiliar de Intro al Álgebra y de Intro a la Progra. Lo malo es que es necesario ver vídeos de Youtube por EOL, lo que requiere descargar JavaScript privativo, por lo que le pedí a los profesores que enviaran los enlaces a los vídeos directamente para poder verlos desde Invidious.

Últimamente he estado practicando mucho en Codeforces, pero lamentablemente no me ha ido tan bien como esperaba. De hecho, me ha ido bastante mal. También me he sentido muy ansioso en general porque pienso mucho sobre si mis metas (como la de ser red coder) son las adecuadas para mí.

Para ayudarme con lo anterior, me he preguntado por qué quiero ser red coder en Codeforces, y he identificado tres motivos principales:

1) Quiero ser muy bueno en algo, y ya soy medianamente decente en programación competitiva por lo que el camino a recorrer es aparentemente más corto.

2) Me gustaría ver a Chile con un red coder y con gente más habilidosa en general. Con mis habilidades obtenidas también podría ayudar a otras personas a mejorar en programación.

3) Pienso muy seguido en que me fue mal en la IOI y debería haber entrenado más, por lo que esto me serviría como una forma de redención conmigo mismo.

A ver, pensemos un poco. ¿Son estos motivos suficientes para querer dedicarle cientos de horas de tu vida a ProgComp?

Definitivamente el tercer motivo no es válido para mí, porque quiero tomar la mejor decisión dadas las circunstancias. Así que me enfocaré en los dos primeros motivos.

Respecto del primero, disfruto pensar y resolver problemas que requieran una mezcla entre creatividad y pensamiento sistemático, y la programación competitiva ofrece justamente eso. Me apasiona la idea de volverme muy bueno en Codeforces. No obstante, hay otras cosas en las que puedo ser bueno, y quizás en ellas le haría un mayor bien a la humanidad, como dedicarme a un proyecto real de software.

Respecto del segundo motivo, nuestro país tiene problemas grandes dónde la informática puede contribuir a su solución, problemas aparentemente más importantes que unos puntos en una página de internet o la habilidad de un@s cuant@s en una actividad en concreto, sobretodo si consideramos que la programación competitiva no es un fin en sí mismo sino que tiene el objetivo de generar mejores ingenier@s de software y científic@s en computación.

En conclusión, me gusta resolver problemas algorítmicos, pero el fin es ser bueno en informática para un bien social, por lo que abandonaré mi objetivo de ser red coder (aunque seguiré mejorando en Codeforces por diversión y un sentimiento de crecimiento personal) y buscaré algo en lo que pueda aportar con mis conocimientos y habilidades (presentes y futuras).

Hace algunos años postulé y entré como alumno a estudiar Ingeniería y Ciencias en la Universidad de Chile. Lamentablemente, la pandemia arruinó mi expectativa ya que todas las actividades se volvieron online. Lo bueno es que este año volveremos a las actividades presenciales (¡por fin!), y estaré escribiendo mis experiencias en este blog. Aunque no lo parezca, no me siento muy motivado, porque en general no ando con muchas ganas de hacer cosas, y porque hay otras cosas que quiero hacer este año y siento que la universidad me quitará bastante tiempo. A pesar de eso, espero tener una buena experiencia: aprender mucho y conocer gente buena onda.

Pronto competiré en una ronda de Codeforces hecha por un Argentino. Espero remontar lo que perdí durante el mes. Luego de eso me iré a Santiago.

Últimamente me he sentido mal conmigo mismo. Me he propuesto la meta de ser el primer red coder chileno de la historia. Parece una meta difícil de alcanzar, y lo es. Durante este mes he estado resolviendo muchos problemas de programación para mejorar mi nivel, pero lo único que gano es perder rating (que es como el ELO del ajedrez, solo que en este caso se calcula en base al rendimiento de tod@s l@s participantes). Después del concurso consigo resolver el problema con una solución relativamente sencilla. En parte me alegra porque pude conseguir lo que me había costado tanto antes, pero por otra parte me frustra el no poder resolver cosas que deberían ser fáciles para mi, sobretodo considerando que llevo años en programación competitiva.

No sé si considerar la frustración como un problema de autoestima. Por un lado me pregunto si realmente podré ser red coder y me siento como un tonto cuando leo el tutorial y la solución es muy simple, pero por otro sigo intentándolo porque en el fondo me gusta hacer esto y siento que no quiero dejar atrás algo que llevo haciendo durante mucho tiempo. De todas formas, tengo otras virtudes aparte de programar, y puedo ser un gran informático sin necesidad de tener un buen rendimiento en esta clase de competencias.

Lo bueno es que al escribir estas palabras me he sentido algo mejor. Eso significa que escribir ayuda a despejarse. Pero no debo relajarme tanto si quiero ser el primer red coder chileno. Debo disfrutar del proceso, no sentirme mal por tener que leer la solución, y sobretodo ayudar a alguien con lo que estoy haciendo. Estoy trabajando en un proyecto relacionado, y tengo pensados otros más que espero sean de su agrado.

Un problema muy común es el de calcular la potencia de un número $b$ con exponente $n$, es decir, calcular $b^n$. La forma obvia de hacerlo en programación consiste en multiplicar $b$ por si mismo unas $n$ veces con un bucle. Esta solución requiere de $O(n)$ operaciones, lo que puede ser demasiado para determinados contextos. En este artículo expondré sobre una forma más eficiente de resolver el problema, aunque sólo aplica para números .

La idea

Sea $b$ la base y $n$ el exponente (un entero no negativo) al que queremos elevar el número $b$. El algoritmo de exponenciación binaria nace de una simple observación: Si $n$ es par entonces $b^n = (b^2)^{\frac{n}{2}}$, y si $e$ es impar entonces $b^n = b \times b^{n-1}$. Por lo tanto el problema se puede expresar de forma recursiva:

potencia(b, n):
    // Caso base
    Si es es nulo:
        retornar 1

    Si e es par:
        retornar potencia(b*b, n/2)
    Si e es impar:
        retornar b * potencia(b, n-1)

Complejidad temporal

La exponenciación binaria es mucho mejor que la lineal, sobretodo si se implementa de forma iterativa y usa con exponentes grandes. Se puede demostrar que ejecuta $O(\log{n})$ operaciones.

Bibliografía

La semana pasada se aprobó en la Comisión Sistemas de Conocimientos, una norma constitucional para modernizar la legislación sobre derecho de autor, equilibrando los derechos morales y patrimoniales de los autores y autoras con el derecho del público general a acceder a la cultura. Ahora vayamos al grano: uno de los artículos aprobados obliga al estado a “utilizar y promover recursos y herramientas de libre acceso y distribución, así como aquellas que permitan la innovación por medio de su modificación”. En la discusión de la norma se hizo mención al posible uso de software libre (programas informáticos que otorgan las libertades de usarlos para cualquier propósito) por parte del estado en lugar de software privativo (programas que no otorgan alguna de las libertades mencionadas) debido a este artículo. Lo anterior nos daría más soberanía como país ya que el estado podría auditar la seguridad de los programas informáticos que ocupa y adaptar dichos programas a sus necesidades. Además podría ahorrar miles de millones de pesos que se gastan en licencias de uso de software privativo.

Mi preocupación radica en que el artículo de la norma es demasiado débil para “abrirle la puerta” al software libre en el estado. No consigue que el estado priorice el software libre por sobre el que no lo es, ya que el artículo puede interpretarse de modo que se usen sólo algunos programas libres y que el resto sean privativos. Por tanto, no se conseguiría el objetivo de incrementar la soberanía informática. Desconozco si es posible, pero en caso de serlo, espero que el pleno pueda corregir el artículo para que obligue al estado a priorizar el uso de recursos de libre estudio, modificación y distribución.

Aquí publico un comentario de una cita que escribí para una asignatura en la Universidad. Defiende la idea de que las necesidades en el ser humano no son necesariamente ilimitadas y que el deseo de maximizar las propias riquezas no es hegemónico en todas las culturas.

Cita a comentar

“Deberá dependerse siempre del principio de acción cuya influencia sea la más poderosa, constante, uniforme, permanente y más generalizada entre la humanidad. Ese principio es el interés personal [egoísmo o maximización]; el sistema de economía que se construya sobre cualquier otra base, se edifica sobre una base falsa” Jeremy Bentham, filósofo utilitarista La psicología del hombre económico

Introducción

La cita a comentar fue escrita por Jeremy Bentham, un filósofo importante en la formulación del utilitarismo, corriente filosófica cuyo principio fundamental es que la medida del bien y del mal es la máxima felicidad del máximo número de personas (Cortina, 1994, p. 29-30). Desde esta perspectiva, en la cita se plantea que los sistemas económicos deben basarse en el interés personal de quienes lo componen, es decir, suponer que todas las personas buscan maximizar su propia felicidad sin tomar en cuenta la del prójimo (Bentham, 1786). No obstante, es legítimo preguntarse si el interés personal es el motor principal de la conducta humana en todas las culturas. En el presente comentario se intentará dar respuesta a la problemática anterior, explorando las necesidades humanas, la moral imperante en algunas sociedades que existieron en el pasado, y las causas y consecuencias de la ayuda mutua y cómo éstas están relacionadas con el altruismo y con el propio bienestar.

Desarrollo

En primer lugar, los seres humanos estamos programados por naturaleza para buscar nuestra propia supervivencia. En la Pirámide de Maslow, el primer peldaño está reservado para las necesidades relacionadas con la supervivencia, tales como la alimentación y el sueño (Maslow, 1943). Claramente la satisfacción de dichas necesidades contribuyen al propio bienestar personal del individuo, pero no son ilimitadas ya que existe un máximo nivel en el que éstas pueden satisfacerse. Por ejemplo, uno no puede comer ilimitadamente, sólo hasta la saciedad, y tampoco es necesario ingerir una cantidad infinita de alimento para vivir. De hecho, en su tratado sobre la política, Aristóteles asevera que los recursos necesarios para vivir “parecen constituir la verdadera riqueza, pues la propiedad de esta índole que basta para vivir no es ilimitada” (Aristóteles, Siglo IV a. C).

Por otra parte, la subsistencia no es la única necesidad del ser humano. Recordemos que las personas, en general, también necesitan recibir afecto, atención, respeto, y tener una sensación de libertad y seguridad (Maslow, 1943). Según los aristotélicos, “Los hombres tienden necesariamente a la felicidad” (Cortina, 1994, p. 29). Lo anterior podría hacernos pensar que Sin embargo, la felicidad, entendida como el estado de mayor satisfacción física y espiritual, y a la vez el fin último del ser humano, no se consigue con las riquezas naturales (que según San Tomás de Aquino, son las necesarias para vivir, “para subsanar las debilidades de la naturaleza”), pues “se las busca en orden a otra cosa; para sustentar la naturaleza del hombre y, por eso, no pueden ser el fin último del hombre, sino que se ordenan a él como a su fin.” (de Aquino, Siglo XIII), ni tampoco con riquezas artificiales, como el dinero, porque este tipo de riquezas se creó como un medio para conseguir riquezas naturales mediante el intercambio, tal como explica Aristóteles en el primer libro de su tratado sobre Política: cuando se dependió más del exterior para importar lo necesario y exportar lo que se tenía en abundancia, la necesidad hizo que se ideara la utilización del dinero por no ser fáciles de transportar todos los productos naturalmente necesarios. Por eso convinieron en dar y recibir recíprocamente en sus cambios algo que, siendo útil en sí mismo, fuera además de fácil manejo para la vida, como el hierro, la plata o algo semejante. (Aristóteles, Siglo IV a.C.)

Además, la satisfacción de ciertas necesidades como el afecto y el respeto, deben cumplirse de manera recíproca entre dos personas, por lo que su satisfacción requiere de un comportamiento no egoísta, pues se debe tener en consideración el bienestar del prójimo. De este modo, el ser humano no necesita maximizar sus riquezas ni ser completamente egoísta para alcanzar la felicidad.

Sumado a lo anterior, el comportamiento humano está sujeto a las expectativas culturales del entorno, y en distintas sociedades se han creado mecanismos, ya sea de manera consciente o inconsciente, para ayudar al prójimo y otros para evitar una excesiva acumulación de riqueza. A continuación estudiaremos algunos ejemplos de estos mecanismos en sociedades antiguas y medievales.

Un ejemplo de estos pueblos es el judío, cuyos integrantes no actúan basándose en el interés personal, o al menos no principalmente, sino de la voluntad y las normas marcadas por su dios, Yahvé. Por ejemplo, en el Deuteronomio se le impera a los fieles apartar la décima parte de su cosecha anual cada tres años para que el levita, los extranjeros, los huérfanos y las viudas que viven en su ciudad puedan alimentarse. También les ordena perdonar las deudas de sus deudores en el año sabático, es decir, cada siete años, y el párrafo siguiente apela a los fieles a ser caritativo y ayudar a los pobres: “Si hay junto a ti algún pobre de entre tus hermanos, en alguna de las ciudades de tu tierra que Yahvé tu Dios te va a dar, no endurezcas tu corazón ni cierres tu mano a tu hermano pobre; antes bien, le abrirás tu mano y le prestarás lo que necesite para remediar lo que le falta.”. A pesar de lo anterior, un contra-argumento en defensa del principio del egoísmo podría ser que los fieles no actúan de forma caritativa como un fin en si mismo, sino como un medio para conseguir la bendición de Yahvé, bendición que se menciona en el mismo libro. No obstante, ello no es a costa del prójimo sino que en su auyda.

En las ciudades medievales en Europa imperaba una jurisdicción propia y una organización autónoma dentro de las mismas, y ésta tenía en consideración el bienestar general de su población. Por ejemplo, todos los productos de primera necesidad debían llegar al mercado de la ciudad para que todos los habitantes pudieran abastecerse antes de que un comerciante pudiera adquirir los productos que sobraban, “y aún así su ganancia tenía que ser nada más una «ganancia honesta»” (Kropotkin, 1902). Sobre la Grecia Arcaica, Finley comenta que En el comercio o en cualquiera otra relación, había que acogerse al principio de igualdad y beneficio mutuo. La ganancia a expensas de otro pertenecía a un terreno diferente, al de la guerra y de la incursión, donde se obtenía por realización (o amenaza) de proezas, no por manipulaciones y regateos. (Finley, 1954)

Las normas mencionadas anteriormente no están basadas en la maximización, sino en el bien común y una limitación razonable de las ganancias que un comerciante podía obtener, o bien en el principio de beneficio mutuo en el caso de la Grecia Antigua, donde el lucro a expensas de otro griego iba contra la moral de dicha sociedad.

No obstante, el concepto de maximización no estaba ausente en la totalidad de civilizaciones antiguas. Aristóteles escribió sobre dos tipos de crematística: una natural, cuyo fin era “el vivir bien”, y otra antinatural, cuya finalidad era maximizar las riquezas como un fin en sí mismo. Sobre la antinatural, el filósofo comenta: “aquella crematística es comercial y productiva de dinero, no en general, sino mediante el cambio. Esta crematística comercial parece tener por objeto el dinero, ya que el dinero es el elemento y el término del cambio, y la riqueza resultante de esta crematística es ilimitada. (…) Por un lado, pues, resulta claro que toda riqueza debe tener un límite, pero de hecho vemos [18] que ocurre lo contrario, pues todos los que trafican aumentan su caudal indefinidamente.” (Aristóteles, Siglo IV a.C.). Este tipo de crematística surgió años después del período estudiado por Finley en “El mundo de Odiseo”, pero de todas formas el filósofo griego mantiene una actitud crítica respecto de ella y de quienes la practican.

Conclusiones

El ser humano busca satisfacer sus necesidades, pero la cantidad de recursos necesarios para dicho fin no es infinita, por lo que no es siempre necesario adquirir la máxima cantidad de dichos bienes. Además, varias de las sociedades históricas que estudiamos han confeccionado y aplicado un sistema de normas que fomenta la cooperación, incluso entre individuos que no forman parte del mismo núcleo familiar. Y aunque de todas formas existían personas que buscaban maximizar sus riquezas, constituían sólo una fracción de su respectiva sociedad y eran mal vistas por ésta. Lo anterior nos permite concluir que el deseo de maximizar bienes que proporcionan placer o felicidad no es universal en todos los seres humanos, ni en todas las culturas. No obstante, las personas que componen los sistemas estudiados se benefician de dichos sistemas, por lo que el presente comentario no demuestra que el interés en uno mismo o una misma no es un universal cultural. Una reflexión en profundidad sobre la última problemática mencionada, desde un punto de vista antropológico, podría involucrar el estudio de sociedades cuyos individuos sean ajenos a sí mismos, en caso de que existan.

Bibliografía

Aristóteles (Siglo IV a.C.) POLÍTICA: La economía: propiedad y crematística

Bentham, J. (1786) La psicología del hombre económico

Cortina, A. (1994) Ética de la empresa: claves para una nueva cultura empresarial. Trotta, Madrid

Tomás de Aquino (Siglo XIII) Suma Teológica

Finley, M. (1954) El mundo de Odiseo

Kropotkin, P. (1902). Capítulo 5: Ayuda mutua en la ciudad medieval. En La ayuda mutua

En el mundo de la programación competitiva, es muy común practicar resolviendo problemas de concursos anteriores en un juez en línea al que se le envía el código fuente de la solución para que éste entregue el veredicto. Pero a pesar de que esta sea la forma de entrenar a la que estamos acostumbrad@s, y considerando esencial para la libertad el que podamos controlar las herramientas que ocupamos, es sensato preguntarse si los jueces en línea como los conocemos implican la renuncia por parte de l@s usuari@s al control de sus actividades informáticas por constituir un servicio que aparentemente podría ser fácilmente reemplazado por un programa libre en nuestro computador. En este artículo responderé a la interrogante ponderando cómo se beneficia y cómo se perjudica el usuari@ por el uso de un juez en línea en lugar de un juez local.

Conceptos previos

Para poder ejercer el control efectivo sobre nuestras actividades informáticas, es necesario que los programas que usamos vengan con al menos cuatro libertades:

  1. La libertad de ejecutar el programa para cualquier propósito
  2. La libertad de estudiar el código fuente del programa y modificarlo
  3. La libertad de distribuir copias exactas del programa
  4. La libertad de distribuir versiones modificadas del programa

Los programas que cumplen con las cuatro libertades se conocen como software libre. En artículos anteriores expuse sobre el tema y expliqué cómo afectan a las libertades de l@s usuari@s. Cuando una de las libertades es insuficiente, es una injusticia porque se le priva al usuari@ de una libertad que merece. Los programas sin las cuatro libertades se conocen como software privativo.

Otra forma de hacer que la gente ceda el control de sus actividades informáticas consiste en los servicios que sustituyen al software, servicios que consisten en programas que se ejecutan en el computador del proveedor del servicio cuando perfectamente l@s usuari@s podrían tener una copia de un programa libre que hiciese la misma tarea. En este caso l@s usuari@s dependen del proveedor del servicio para realizar la actividad, y sólo pueden hacerla de la forma en que el proveedor quiera. El proveedor también puede abusar de su poder para espiar a l@s usuari@s.

Al grano

En primer lugar, hay que dejar claro que los jueces en línea son servicios, por lo que debemos determinar si reemplazan un potencial programa libre que corra en el computador del usuari@. Para que un juez local pudiera hacer su trabajo, debería contar con los casos de prueba y scripts de evaluación de cada problema. Esta información debe ser sacada de internet (es posible generar los casos de prueba localmente, pero en ese caso el generador tendría que ser descargado de internet de todas formas). El caso es distinto al de un traductor o un editor de imágenes, en el que el usuari@ debe proveer todos los datos de entrada. Además, en los concursos es necesario estar conectad@ a internet para que nuestras soluciones puedan ser auditadas y así poder evitar y detectar a la gente que hace trampa.

Además de lo anterior, la delegación de la actividad de juzgar a un servicio puede parecer que reporta ciertas ventajas prácticas, aunque después explicaremos cómo se pueden incorporar en un potencial juez local:

  • Se puede acceder desde cualquier computador, pues basta con conectarse al servidor del juez en línea
  • Puede tardar menos tiempo en juzgar, dependiendo del poder de procesamiento de nuestro computador
  • Menos tiempo en descargar datos del problema, porque la mayoría están en el juez
  • Participar en la elaboración de estadísticas y en ciertos concursos, como el Coder del mes de OmegaUp (aunque esto no es necesariamente bueno)
  • Almacenar las soluciones y sus veredictos en un servidor remoto.

Por otra parte, el hecho de que los jueces en línea sean servicios genera cierta dependencia que se podría evitar con un juez local:

  • Es necesario que los servidores estén funcionando para poder resolver el problema, pues no todos los jueces tienen todos los problemas.
  • No siempre se puede saber como funciona, y en los casos en los que sí no se puede cambiar el funcionamiento del programa.
  • El proveedor del servicio puede espiar los hábitos de entrenamiento y las soluciones de l@s usuari@s, y a veces esos datos son visibles para todo el mundo. Esto es así porque l@s usuari@s están obligad@s a compartir cierta información que quizá no quieren compartir para poder resolver ciertos problemas, pues es poco práctico crear una cuenta distinta para cada solución que se desee enviar.

Reemplazar los jueces en línea por un juez local traería más independencia a l@s usuari@s, que podrían modificar el juez para tener ventajas prácticas respecto de los jueces en línea, tales como:

  • Nuevos lenguajes de programación
  • Menor tiempo en juzgar, al evitar las colas de subidas de soluciones
  • Tiempo límite diferenciado para lenguajes de programación más lentos, como Python
  • Mayor variedad en la naturaleza de los problemas de programación competitiva, en vez de únicamente problemas algorítmicos.

¿La solución?

Lo ideal sería dejar los jueces en línea sólo para los concursos porque requieren que l@s participantes estén conectad@s a internet, y para las otras cosas tener un juez local extensible que se ejecutara en la máquina del o la participante, que incorporara las ventajas prácticas de los jueces en línea a la vez que garantizara la independencia de l@s usuari@s. En particular, tendría las siguientes características:

Repositorios

Podrían crearse repositorios con conjuntos de problemas para que sean descargados por el juez local. La gente podría crear y subir problemas fácilmente con herramientas que automaticen parcialmente el proceso.

Descarga de problemas

El juez tendría facilidades para visualizar y descargar conjuntos de problemas desde repositorios destinados a ello. Los problemas vendrían en un formato especial para que el juez los detectara y procesara fácilmente.

Descarga rápida de casos de prueba

Al abrir un problema se descargaría primero el enunciado y el resto se descargaría mientras el usuari@ esté leyéndolo. El juez tendría la opción de eliminar los datos a petición del usuari@.

Estadísticas

El juez contaría con un generador y visor de estadísticas sobre los problemas resueltos y el rendimiento del usuari@. También podría recomendar problemas a resolver en base a estas estadísticas.

Sincronización con NextCloud

El juez contaría con la opción de enviar los códigos fuente de las soluciones de manera cifrada a un servidor con NextCloud (que es como Google Drive o Dropbox), para ser consultados y publicados según las necesidades de l@s usuari@s. Después de juzgar el problema, l@s usuari@s podrían decidir si quieren enviarlo o no.

Complementos

Actualmente existen servicios web y programas que sirven de suplemento para los jueces en línea más populares como Codeforces, que aportan funcionalidades como recomendaciones personalizadas de problemas a resolver. Lo ideal es que el juez sea fácil de extender con funcionalidades parecidas a la de estos servicios y programas.

Conclusiones

La mayor parte de las funciones de los jueces en línea podrían realizarse de forma local, pero aún así pueden existir algunas que no, por lo que los jueces en línea no son enteramente SaaSS (sería completamente SaaSS si, por ejemplo, el usuario o usuaria tuviese que enviar los checkers y los casos de prueba para los problemas que quisiera resolver, pero solamente se debe enviar el código de la solución). No obstante, un juez local otorgaría a l@s usuari@s un mayor control sobre las evaluaciones y sobre sus datos personales, aunque también es posible que los jueces permitan juzgar soluciones de manera anónima, sin registrarse.

Por tanto, los jueces en línea deberían tener la opción de descargar los enunciados, casos de prueba y soluciones de los problemas en un buen formato para poder entrenar de forma local, y al mismo tiempo habría que desarrollar un juez local extensible fácil y cómodo de usar, de modo que l@s usuari@s que no quieran ceder sus datos sobre su entrenamiento a un servicio o bien deseen usar sus propias herramientas en lugar de un juez online no sufran desventajas al no poder resolver ciertos problemas. Así se mejoraría la comunidad de programación competitiva.

“Libertad: Falta de sujeción y subordinación” ~ Definición de la Real Academia Española

El software libre es aquel que respeta nuestra libertad como usuari@s otorgándonos cuatro libertades sobre el programa: Usar el programa para cualquier propósito, estudiar el código fuente del programa y cambiarlo como queramos, distribuir copias exactas del programa y distribuir versiones cambiadas del programa. Estas libertades permiten a l@s usuari@s controlar sus actividades informáticas mediante lo que hacen sus computadores, y fomentan la cooperación y la ayuda a la comunidad.

Un programa que no viene con alguna de las cuatro libertades mencionadas se llama privativo, porque priva de la libertad a sus usuari@s, respecto de ese programa. El software privativo impide formas importantes de cooperación y de empoderamiento, además de obstaculizar el desarrollo de nuevas tecnologías. Por eso, mucha gente lo considera anti-ético. Sin embargo, puede ser difícil de entender cómo el software privativo afecta negativamente a nuestras vidas, sobretodo si no sabemos ni nos interesa aprender a manipular código. En este artículo ahondaremos en los principales perjuicios a la sociedad provocados por distribuir software sin las cuatro libertades, y determinaremos si deberíamos rechazar el uso de programas que no son libres.

El perjuicio del privativo

Muchas veces, aunque no siempre, podemos elegir si aceptar el uso de un programa privativo, pero si aceptáramos estaríamos cediendo parte del control de nuestras actividades informáticas. No podríamos saber exactamente qué hace nuestro computador (ni consultar con otras personas ajenas al desarrollador sobre su funcionamiento, porque no tendrían acceso al código fuente), ni usarlo para lo que queramos. Si algo no nos gusta del programa no podríamos cambiarlo ni acudir a otras personas para que lo hagan por nosotros. El único control que podemos tener sobre un programa privativo es decidir si usarlo o no, pero hay veces en las que estamos obligad@s a usar software privativo para poder comunicarnos con alguien (ejemplo: Whatsapp), por el trabajo o la escuela, en esas ocasiones nos sentimos presionad@s a usar software privativo, por lo que no es fácil decir que no.

No obstante, aunque en teoría no tengamos estas libertades, es posible pensar que su ausencia no afecta al usuario promedio porque supuestamente lo único que le interesa es que el programa funcione para lo que él quiere y aunque hayan cosas que le disgustan del programa, es probable que el desarrollador las arregle o bien el usuario no quiera molestarse en hacer los cambios correspondientes. A continuación responderemos a algunas objeciones posibles a la idea de que el software privativo afecta a l@s usuari@s de computadores, es decir, a tod@s nosotr@s, para luego responder a la interrogante: ¿Deberíamos rechazar el uso de software privativo, por nuestra libertad? Examinaremos el impacto de cada una de las libertades del software libre, y la ausencia de éstas, y luego revisaremos algunas consecuencias de la aceptación y rechazo del software privativo, para finalmente obtener una conclusión.

Libertad 0

En primer lugar, es importante poder usar nuestras herramientas informáticas según nuestros propósitos. Sin la libertad 0, parte de nuestros programas que ocupamos sólo pueden ser usados para los fines estipulados por el desarrollador (como el frecuente caso de las licencias de software para uso no comercial, al comprar objetos materiales esta restricción no suele existir), y sólo mientras éste nos permita usar el programa. Por ejemplo, hay licencias de software que expiran a voluntad del desarrollador, o por órdenes de gobiernos extranjeros. El que nuestras herramientas informáticas tengan restricciones de uso es como que los autos vengan con una prohibición de usarlos en ciertas ciudades, tijeras que por una licencia de uso no puedan ser usadas para hacer manualidades, o salsa que por decisión de l@s productores no pueda ser usada en determinadas comidas porque eso afectaría a sus intereses.

Por otra parte, si con el fin de que todos nuestros programas instalados tengan la libertad 0 rechazamos los que no nos den dicha libertad, puede ser que tampoco podamos usar nuestro computador para algo que esté prohibido por la licencia de los programas a rechazar, y además nos perdamos de las características útiles de tales programas. Por tanto, aunque en proporción perdamos soberanía sobre nuestra informática al instalar software privativo, en cantidad podríamos hacer más. Esto sólo sería cierto si es que no existiesen programas libres que tengan las mismas funcionalidades esenciales del programa privativo, pero actualmente existe mucho software libre y existen reemplazos libres para los principales programas privativos existentes. En AlternativeTo se pueden encontrar varias opciones libres bajo la etiqueta open source.

Otra posible objeción a la idea de la necesidad de la libertad 0 es que si queremos hacer X actividad prohibida por la licencia del programa simplemente podemos instalar otro programa que sí lo permita. Pero cambiarse de programa no siempre es fácil. A veces habrá que pagar por otra licencia de uso o aprender a usar otra herramienta desde 0. Por ejemplo, una crítica común a GIMP es que su interfaz es muy distinta a la de Photoshop y tiene un soporte mediocre para los archivos PSD que son nativos de Photoshop. También esa posible que nos volvamos dependientes de un programa que no podremos reemplazar en caso de que lo necesitemos. Si valoramos nuestra libertad, escogeremos siempre el software libre.

Libertad 1

Sumado a lo anterior, el código fuente del software privativo no suele estar disponible, por lo que no se puede aprender de él ni cambiarlo para que nuestro programa haga lo que queramos. Necesitamos poder averiguar cómo funcionan los programas que ocupamos para tener el control efectivo sobre ellos. Esto podría parecer irrelevante para la gente que no sabe programar, pero el problema se puede ilustrar mejor con una analogía.

Cuando compramos alimentos, éstos suelen venir con la lista de ingredientes que fueron usados en su preparación. Esto nos permite saber qué vamos a introducir en nuestro cuerpo, si tiene los nutrientes que necesitamos, si tiene ingredientes malos por nuestra salud, entre otras cosas. Si no sabemos sobre nutrición, podemos investigar en internet (desde fuentes confiables) sobre el tema, o acudir a otras personas ajenas al fabricante para que nos asesoren. Por ejemplo, mucha gente tiene contra-indicaciones médicas que no les permiten ingerir determinados componentes, puede que queramos reducir nuestro consumo de azúcar (es mi caso), o podemos estar siguiendo una dieta estricta.

Volviendo al software, el código fuente de un programa es como una receta que le dice a nuestro computador las instrucciones que debe seguir para ejecutar el programa. Tener el código fuente nos permite acudir a otras personas para saber qué es lo que realmente hace el programa, aunque no sepamos programar. Esto es especialmente importante para encontrar vulnerabilidades de seguridad en nuestro computador, y también para detectar malware introducido a propósito por el desarrollador para dañar al usuario con el fin de seguir sus propios intereses.

Una objeción posible es que por nosotr@s mism@s no podemos auditar todos los programas que ocupamos por lo que dependemos de otr@s informátic@s para poder saber sobre errores y malware, por lo que al depender de alguien más no seríamos libres realmente. Con el software privativo la situación es peor, porque es necesario confiar en el desarrollador pues es el único que tiene el código fuente, y él podría mentir. Por ejemplo, Zoom le mintió a sus usuari@s con que el programa ofrecía cifrado de extremo a extremo. Según la Federal Trade Commission, Zoom ofrecía cifrado P2P de 256 bits cuando en realidad la seguridad del programa era muy inferior (el cifrado usado era de 128 bits) y las claves privadas que sirven para ver el contenido de las comunicaciones se guardaban en los servidores de Zoom, por lo que la empresa podía espiar las conversaciones de l@s usuari@s. Eso no es cifrado de extremo a extremo real.

Sabemos que Zoom mintió en algunas de sus afirmaciones porque el CPO de Zoom reconoció que el programa era incapaz de hacer cifrado de extremo a extremo (traducción mía desde la versión original en inglés sacada del reclamo de la FTC):

“A la luz del reciente interés en nuestras prácticas de cifrado, queremos empezar disculpándonos por la confusión que hemos causado sugiriendo incorrectamente que las reuniones vía Zoom eran capaces de usar cifrado de extremo a extremo. Zoom siempre ha tratado de usar cifrado para proteger el contenido en la mayor cantidad de escenarios posible, y en ese espíritu, usamos el término 'cifrado de extremo a extremo'. Mientras que nunca intentamos engañar a nuestr@s clientes, reconocemos que hay una discrepancia entre la definición aceptada de 'cifrado de extremo a extremo' y cómo lo estábamos utilizando. Este blog busca rectificar esa discrepancia y clarificar exactamente cómo ciframos el contenido que se mueve a través de nuestra red

Desde hace años (al menos desde el 2016) que Zoom promete cifrado de extremo a extremo, pero recién se implementa una versión preliminar de éste a fines del 2020. En el artículo al que se acaba de enlazar admite que antes, las claves privadas pasaban por los servidores de la empresa.

Lamentablemente no podemos asegurarnos de que tod@s l@s desarrolladores de software privativo reconozcan sus mentiras o equivocaciones. Si alguien miente diciendo que encontró malware en un programa libre, o que el programa implementa seguridad que en realidad no tiene, el resto de la comunidad de usuari@s podría desmentirl@. Con el software libre es mucho más fácil encontrar vulnerabilidades de seguridad, lo que los hace más seguros, mientras que es más probable que las vulnerabilidades de seguridad del software privativo pasen desapercibidas. Relacionado con lo anterior tenemos el proyecto FOSSA de la Unión Europea que ofreció recompensas por hallar errores de seguridad en determinados proyectos de software libre. Al parecer el proyecto fue exitoso, pues a inicios del 2021 la Comisión Europea lanzó nuevos Bug Bounties.

A pesar de las muestras de mayor seguridad en el software libre, alguien podría querer que la gente no pueda ver el código de los programas que ejecuta, ya sea por temor a ciber ataques o cualquier otro motivo. Esto se puede solucionar mediante la descarga anónima de programas, así no se sabría el código que el computador de esta persona está ejecutando. Sin embargo, si él o ella comparte que está usando determinado programa y ese programa es libre entonces se conocería parte del código que ejecuta su computador, pero volver privativo al programa no arreglaría totalmente el problema pues el desarrollador sigue teniendo el código fuente.

Libertad 2

Debemos poder ayudar al resto. Gracias a la cooperación tenemos muchas cosas buenas como sociedad. Si usamos un programa útil, éste podría ser útil para otras personas también, por lo que para ayudar a l@s demás deberíamos poder compartir copias de éste. Una licencia de uso que prohíbe esta forma de cooperación es anti-social, y priva al programa del enorme beneficio potencial que tiene.

La práctica de compartir herramientas útiles es muy antigua. En el caso del software esto es mucho más fácil ya que es abundante por naturaleza, producir copias adicionales de éste tiene un coste marginal prácticamente nulo. Es por eso que cualquiera con un computador (la mayoría de celulares también son computadores), memoria suficiente y un medio para compartir información (como internet) puede crear y compartir una copia exacta del programa, lo que hace al software libre mucho más accesible y beneficioso para un mayor número de personas, a diferencia del software privativo que para conseguir una copia sólo se puede acudir al desarrollador.

A pesar de este beneficioso poder de la tecnología informática, la propaganda impulsada por los medios y grandes empresas titulares de la mayoría de obras sujetas al derecho de autor (que es el medio por el que se suelen restringir las libertades del software), ocupan términos como “piratería” y “robo” para criminalizar la práctica de compartir copias de varios tipos de obras, entre ellos el software. Argumentan que compartir una copia entre A y B es robarle al desarrollador C que merece un pago por su trabajo. No obstante, el que A le pase a B una copia de un programa desarrollado por C afecta a B directamente y a C sólo indirectamente, ya que C no pierde su copia original ni pierde dinero, sólo no obtiene el dinero que obtendría si B le hubiera comprado a C, pero decidir no comprar un producto de un distribuidor en vez de otro no es robar. Es distinto a robar algo en una tienda, pues l@s dueñ@s de ésta perderían la posesión que quieren vender. Además, existen otras formas de financiar el desarrollo de software y de darle una vida digna a l@s desarrolladores.

Ahora bien, esto le puede parecer irrelevante a una persona egoísta que no tiene ninguna intención de ayudar a l@s demás. También se puede objetar argumentando que el programa privativo no se puede compartir independiente de si se rechazara su uso, o que el programa en cuestión es gratis y cualquiera lo puede descargar. No obstante, aunque la pérdida de libertad 2 no aparente tener un impacto directo sobre el usuari@, el software privativo hace que éste dependa de los medios de distribución autorizados por el desarrollador. Un ejemplo del perjuicio provocado por esta dependencia es la eliminación de los juegos clásicos de Angry Birds de las grandes tiendas de aplicaciones. Éstos ya no se pueden descargar desde la Play Store ni la App Store, sólo en sitios de APKs de dudosa seguridad. Podemos comprobar esto buscando algún juego clásico como Angry Birds Seasons o Angry Birds Space en alguna de estas tiendas.

Libertad 3

La libertad 3 consiste en distribuir versiones modificadas del programa. Para l@s que no saben programar esta libertad puede parecer inútil, pero es la que nos permite usar versiones modificadas desarrolladas por otras personas.

Al utilizar un programa libre, si algo del programa no nos gusta, no dependemos del desarrollador original para cambiarlo, sino que podemos acudir a cualquier programador para que haga los cambios por nosotros. Si sale demasiado caro, varias personas pueden reunir fondos para la contratación. Existen varios intentos exitosos de levantamiento de fondos para el desarrollo de software libre, y se pueden crear plataformas en la que l@s usuari@s voten por la inclusión de determinadas características en programas libres.

Si no queremos o no podemos invertir dinero o tiempo en participar de una comunidad, de todas formas nos beneficiamos de las libertades del software libre. Muchos programas populares son versiones modificadas de otros. A continuación algunos ejemplos:

  • MATE, una interfaz gráfica, nació como una versión modificada de GNOME 2, una interfaz gráfica que era muy popular. Sin embargo, su nueva versión GNOME 3 tuvo una mala recepción, lo que hizo que un usuario argentino continuara con la base de GNOME 2, creando MATE.

  • LibreOffice es una suite ofimática muy usada que viene en la mayoría de distribuciones de GNU+Linux. Fue creada a partir de OpenOffice, algún tiempo después de que Oracle adquiriera Sun Microsystems, la empresa que más financiaba OpenOffice. Oracle había tenido una actitud hostil hacia muchos proyectos de software libre dirigidos o auspiciados por Sun, así que por preocupación a que algo parecido ocurriese con OpenOffice, much@s desarrolladores se unieron para crear una versión modificada llamada LibreOffice.

  • SuperTuxKart es un juego libre de karts parecido a Mario Kart. Está basado en el antiguo TuxKart, proyecto que terminó abandonado luego de disputas entre los desarrolladores. Con el objeto de arreglar el juego y devolverle algo a la comunidad del software libre, Joerg “Hiker” Henrichs revivió el proyecto. Actualmente el juego está completo (su última versión a la fecha es la 1.3): cuenta con muchos personajes y pistas, tiene varios modos de juegos, y hasta se puede jugar en línea.

Por otra parte, en el software privativo sólo se puede usar la versión escrita por el desarrollador, ya que no se pueden distribuir versiones modificadas. Esto le confiere un poder al desarrollador sobre l@s usuari@s y es usual que abusen de él. Take-Two, la empresa detrás de Rockstar, que desarrolla los juegos de GTA, ordenó la eliminación de varios mods luego de actualizar su política de mods dictando que los no deben añadir nuevo contenido, lo que perjudicó a la comunidad de GTA. Obviamente no tod@s l@s jugadores de GTA desarrollan mods, pero hay muchos que son usuari@s de éstos. Las licencias de software libre no expiran y no ponen restricciones sobre el tipo de cambios que se le pueden hacer al programa, por lo que si los juegos de GTA fuesen libres, Take-Two no habría podido hacer lo que hizo.

El problema no termina ahí. El poder que l@s desarrolladores tiene sobre l@s usuari@s hacen que introduzcan malware sobre los programas y l@s usuari@s no puedan hacer nada al respecto. Si el programa con malware fuese libre podría ser modificado y l@s usuari@s podrían usar la versión modificada sin el malware. Un ejemplo de esto es Firefox con su alto nivel de spyware y una versión modificada llamada LibreWolf, que mejora la privacidad del navegador. Con el software privativo quedaría desarrollar un nuevo programa desde el comienzo, y no puede ser muy parecido al anterior porque violaría las leyes de derecho de autor.

Ahora bien, a pesar de los perjuicios provocados por el software privativo que aquí se exponen, no parece necesario rechazar un programa privativo para usar una versión modificada de un programa libre, y que si se descubre malware en un programa privativo es posible cambiarse a un programa libre sin el malware. Aparte de recordar que el costo de cambiarse de programa puede mayor que el de mudarse a una versión modificada de un programa al que ya nos acostumbramos, las libertades 2 y 3 consisten en derechos a ayudar al resto por lo que el beneficio a nivel individual reside mayormente en su ejercicio por parte de terceros.

Disponibilidad de software

Al leer este artículo, puede que pensemos que el beneficio potencial de un programa de libre redistribución y por tanto accesible a muchas personas se opaque por la disminución de programas disponibles producto de la reducción de programadores debido a que supuestamente la industria del desarrollo de software generaría menos dinero. A esto respondo que el que mucha gente no tenga que pagar para conseguir los programas ya es un beneficio que deriva de la libertad del software, y sumado a lo discutido anteriormente y lo que discutiremos posteriormente, podemos concluir que l@s usuari@s sí hacen uso, aunque indirectamente, de su libertad. Y respecto de la cantidad de programas, gracias a la libertad 3 se pueden crear nuevos programas a partir de los ya existentes, lo que disminuye el costo de desarrollo de estos nuevos programas.

Aún con lo planteado anteriormente pueden haber dudas sobre el perjuicio del software privativo sobre el desarrollo de software. Podríamos hacer un estudio más exhaustivo comparando datos de costos de desarrollo, presupuestos, proporción de código fuente sacado de otros programas, entre otros. No obstante, este estudio debe considerar que el software privativo es mucho más usado en muchas áreas, y sobretodo, que los beneficios a nivel práctico no son tan importantes como la libertad y la cooperación. No obstante, realizar esta investigación haría que este artículo fuese demasiado largo.

Premiar al desarrollador

El uso del software privativo genera otra injusticia: premia al desarrollador con popularidad, dinero, datos personales, etc, instándolo a desarrollar más software privativo que daña la libertad de sus usuari@s y priva al software de sus beneficios potenciales. Si queremos una sociedad digital libre, en la que tengamos las libertades de usar, compartir y mejorar la tecnología informática para lo que queramos, debemos desalentar el desarrollo de tecnología que no nos garantice estas libertades, y fomentar el uso de tecnología que sí lo haga.

Presión social

Para determinar si deberíamos aceptar el uso del software privativo, hay que tener en cuenta que no siempre será fácil elegir. Existen muchos casos en los que estaremos presionados a ceder nuestra libertad de software. Esto sirve como contra-argumento a la idea de que el software privativo es legítimo porque nadie obliga a la gente a usarlo, pero la verdad es que hay veces en que el costo de negarse a usar un programa privativo puede ser demasiado alto.

Muchas páginas requiren ejecutar programas dentro del navegador escritos en JavaScript, programas que suelen ser privativos. Esto incluye archivos subidos a Google Drive o Mega, o sitios de vídeos como YouTube o Netflix. Afortunadamente existen formas de acceder al material sin ejecutar JavaScript privativo, pero no siempre es así.

Usar cierto hardware

Muchos dispositivos, como escáneres, impresoras o tarjetas de Wifi, requieren que se instale software privativo para que puedan funcionar. Existen varios dispositivos que funcionan usando solamente software libre, pero no siempre es el caso, y puede que no podamos o no valga la pena gastar dinero en hardware nuevo, además de que aumentaría nuestro impacto en el medio ambiente.

Comunicación

En la actualidad mucha gente depende de las tecnologías digitales para comunicarse con ciertas personas. Puede que tengamos seres queridos con los que nos comunicamos usando programas como Whatsapp o Zoom y no queremos perder el contacto. Esto es súper comprensible. Si es gente que nos valora, podemos pedirles usar un programa libre para la comunicación, explicando brevemente los motivos por los que rechazamos el software privativo.

Exigencias de la escuela, el trabajo, etc.

También hay ocasiones en las que nos presionan a usar software privativo por parte de nuestro colegio o universidad, empleador(a), banco, etc. Podemos intentar dialogar para evitar el software privativo, pero el dialogo no siempre resultará.

Un caso extremo de esta exigencia en Chile es el proceso de solicitud de permisos para salir de casa en la Comisaría Virtual, dentro de las comunas en fase 1. Para solicitar un permiso era necesario completar un reCaptcha de Google, que no sólo requiere ejecutar software privativo sino que también espía y explota a sus usuari@s. Esto plantea un dilema: no poder salir de casa, salir y arriesgarse a ser detenid@, o ceder libertad.

Entonces, ¿qué hacer?

Anteriormente expusimos que la aceptación de software privativo hace que renunciemos a parte del control de nuestras actividades informáticas, subordinando nuestra máquina a los intereses del desarrollador y quitándonos nuestro derecho a saber qué código ejecuta, derecho que puede ser ejercido directamente o gracias a terceros. El software privativo también prohíbe formas importantes de cooperación como la redistribución de copias, ya sea con o sin cambios. Además, dependiendo del caso estaríamos premiando al desarrollador por restringir a l@s usuari@s.

Por otro lado, rechazar el software privativo puede hacer que no podamos hacer ciertas cosas que normalmente podríamos hacer si es que accediéramos a su uso, y puede costarnos el trabajo o nuestra carrera en el peor de los casos.

Mi respuesta a la interrogante del título de este artículo es que es muy importante preservar y promover la libertad en el mundo digital, que cada vez es más importante en nuestras vidas. Hay que tener claro para qué queremos usar el software privativo. Si existe un programa libre que hace lo que queremos hacer, aunque sea un poco más difícil de usar, no hay motivo para escoger el programa privativo. Podemos escoger el programa libre y donar parte del dinero que nos ahorraríamos al no comprar o rentar una licencia de uso del programa privativo, para contribuir a la mejora del programa.

Si no existe un programa libre con las funcionalidades relevantes del programa privativo que se quiere utilizar, tendríamos que preguntarnos qué tan importante es hacer lo que queremos hacer con el programa privativo y qué efecto tendrá sobre nuestro proyecto de vida. Si es absolutamente necesario ejecutar software privativo para llevarlo a cabo o si fuese demasiado difícil hacerlo sin él, entonces quizá valga la pena sacrificar libertad por algo que puede ser más importante: nuestro propósito de vida.

También nos podemos permitir el uso de software privativo ocasionalmente en el computador de otra persona, porque normalmente no tenemos ni deberíamos tener el control sobre dicho computador.

Por otra parte, nuestras decisiones sobre qué programas usar pueden afectar al resto. En algunos casos usar ciertos programas privativos como Zoom o Whatsapp presionan a otras personas a ceder el control de sus actividades informáticas (porque la “calidad” de estos programas viene principalmente de la gente que los ocupa). Si queremos conversar con alguien o crear un evento por videoconferencia, busquemos hacerlo con un programa libre, o por lo menos aceptar alternativas cuando una de las personas involucradas nos comunique que no quiere usar un programa privativo. Si queremos subir un archivo a internet, no lo hagamos por Google Drive (porque para visualizarlo el navegador descarga y ejecuta software privativo), mejor por una plataforma como NextCloud. Debemos elegir de modo que nadie se vea presionad@ a usar software privativo debido a nuestras decisiones.

Ahora bien, puede que no podamos usar ciertos componentes de hardware sin instalar controladores privativos. Lo ideal sería comprar componentes nuevos que sean compatibles con software libre, pero si no podemos permitirnos gastar dinero en nuevo hardware, podríamos usar los controladores privativos temporalmente hasta que podamos comprar hardware nuevo.

Otro posible impacto del uso de software privativo es la recompensa para el desarrollador, ya sea en forma de dinero, datos, popularidad, etc. Vimos que desarrollar software privativo daña a la comunidad de usuari@s, por lo que no debe ser premiado, y si bien hay muchas injusticias en el mundo eso no significa que debamos aceptar esta. Si vamos a usar software privativo, lo mejor será obtenerlo de segunda mano o de forma gratuita, y usarlo en computadores sin conexión a internet o cerrando el puerto de red que este programa ocupa. Tampoco debemos fomentar su uso.

En resumen, sugiero rechazar el software privativo siempre que sea posible, a menos que sea necesario para un propósito mayor a la libertad de software, como salvar vidas o alcanzar nuestro objetivo en la vida. Y si es necesario usar software privativo, que sea procurando recompensar lo menos posible al desarrollador.

A pesar de todo lo mencionado, existen usuari@s que no quieren ni necesitan usar un programa determinado para un fin que esté prohibido (por la licencia o cualquier otro medio). En otras palabras, “el programa funciona para lo que yo quiero”. Lo único que puedo responder a esto es que la cuestión del software libre es ética y no pragmática. El software libre nace para darle libertad a l@s usuari@s, no para conseguir X ventaja práctica. Si valoramos nuestra libertad, en este caso de usar nuestras herramientas con los fines que queramos, deberíamos estar dispuestos a sacrificar algo por ella, aunque sea un poco.

Aún así, no soy nadie para obligarte a hacer algo que no quieres. Siéntete libre de vivir tu vida como quieras, pero ten en cuenta cómo el software privativo dificulta que hagas eso en el mundo digital, que es parte del mundo real.