Posts Tagged ‘Opiniones’

¿Por qué GPL y no otra licencia?

domingo, julio 13th, 2025

Desde hace bastante tiempo, todo software que escribo no sea trivial y que quiera compartir online incluyendo el código porque no lo vaya a explotar comercialmente (o incluso algunos que sí pretendo explotar comercialmente pero no de forma tan obvia), lo publico con licencias como GPL, LGPL y AGPL. La principal razón por la que hago esto es para protegerme a mí y a mis proyectos mediante las cláusulas de viralidad que tiene la familia de licencias *GPL.

Cuando publicas software con licencias como BSD o MIT, estás usando las licencias más permisivas que hay para publicar software dentro de lo mainstream, dándole permiso a cualquier persona a construir a partir de lo que has hecho. Sin embargo, con los años ha quedado evidente que quienes más te van a invitar a publicar bajo esta licencia son también las mayores sanguijuelas del mundo, y es de eso precisamente de lo que me trato de defender.

Al publicar bibliotecas o código con alguna de estas licencias, cualquier persona o empresa puede emplear el código que has hecho como base para crear otras cosas, o usarla como dependencia. No existe ningún tipo de fricción más allá de las pocas cosas que pide la licencia: que no uses el nombre del autor y del proyecto original para implicar apoyo (razón por la que Sony es discreta para decir que el sistema operativo de la PlayStation existe gracias a FreeBSD), y que conserves el texto de la licencia original en el producto final en el que lo usas (esta es la razón por la que tantos programas y aplicaciones móviles hoy día tienen un menú que lista todas las dependencias del mismo y sus licencias).

Pantallazo de la web de licencias de Discord, mostrando partes de las licencias de algunas bibliotecas de software.
Discord no enumera todo lo que tiene en su package.json por gusto, sino porque tiene la obligación de hacerlo.

No existen muchas limitaciones con respecto a lo que se puede hacer con ese código al tomarlo prestado. Puedes escribir el código de una biblioteca JavaScript para crear gráficas SVG, y esa biblioteca puede acabar siendo usada en la pantalla de a bordo de un transbordador espacial, o en la versión web de TikTok o de Instagram.

Cuanto más abierto, más ojos

Eric Raymond con el paso de los años ha tenido el honor de enseñarnos que es un hijo de la grandísima puta, pero cuando escribió originalmente La Catedral y el Bazar después de fundar el concepto «código abierto», acertó con bastantes de las ideas originales que tenía en mente, incluso pese a que, con el paso de las décadas, la manera en la que la sociedad ha acabado usando el código abierto no se ha alineado con lo que originalmente propuso.

Una de esas ideas que nació como una cosa pero que ha acabado convertido en otra completamente diferente es la de que cuanto más abierto y visible sea el desarrollo de un código, más ojos habrá para encontrar los defectos.

Como tal, esto sigue siendo cierto si hay voluntad. Una de las cosas que más feliz me hacen cuando estoy programando con bibliotecas ajenas es tener la oportunidad de depurar un bug, ver que la causa está en una biblioteca ajena, arreglar un archivo que no es mío, y luego enviar la corrección al proyecto original. Y en general esto a pequeña escala sigue siendo frecuente, sobre todo, por parte de personas que tengan menos experiencia.

Sin embargo, no todo el mundo es así. No está de más recordar aquella vez que Microsoft publicó un ticket en el tracker de voluntarios de FFmpeg prácticamente diciendo «lo quiero para ayer» porque la biblioteca falla en una función usada por uno de sus productos estrella. (Siendo justos, FFmpeg está publicado con licencia dual GPL+LGPL, no es una licencia permisiva como la que estoy describiendo aquí.)

Cuando fueron pillados por esto, Microsoft ofreció un simbólico pago de una vez de varios miles de euros por el soporte con este bug. Un bug que, insisto, ocurre en Microsoft Teams. Un programa que a día de hoy mueve el mundo con la energía recíproca con la que miles de trabajadores mueven el ratón cada pocos minutos para que Teams no les marque como ausentes.

Tampoco está de más recordar aquella vez que log4j, una dependencia discreta de Java que normalmente está oculta sin hacer ruido en el fondo de una aplicación, saltó a la fama por una vulnerabilidad que afectaba a demasiadas aplicaciones y que podía reproducirse en productos de Microsoft, Apple, Twitter…

log4j prácticamente por entonces se desarrollaba gratis. Las personas que lo mantenían no habían visto apenas compensación por el trabajo que aportaban a la comunidad, ni siquiera por parte de empresas que habían hecho millones gracias en parte a ese trabajo. Por ponerlo en contexto, uno de los programas donde se usaba log4j era Minecraft, cuyo estudio fue comprado años atrás por Microsoft por 2500 millones de dólares.

log4j ha recibido en los últimos años financiación por parte del STA. Al menos 596.000 €. Su situación sin duda, ha mejorado. Pero es la prueba de que existe mucho software integrado en lo más profundo de la industria, que de desaparecer podría devolvernos atrás varios años, pero que sin embargo no obtiene el reconcimiento que se merece hasta que no es demasiado tarde.

log4j durante un tiempo dio mucho que hablar, y hubo gente que se preocupó por la situación económica y el bienestar de la gente que lo crea, pero con el tiempo volvió a olvidarse el tema. Algo parecido a lo que pasó en 2024 cuando se destapó el backdoor de xz.

Why I GPL

Un artículo antiguo que guardo en mis marcadores como enlace a Web Archive porque ha desaparecido de internet es Why I (A/L)GPL (2011), el cual realmente es bastante parecido a este artículo que estoy escribiendo. En él, se cuenta la historia de Mongrel, uno de los primeros servidores HTTP para Ruby. Las primeras versiones de Ruby on Rails lo usaban, hasta que su creador cambió de stack y el proyecto quedó abandonado y reemplazado por otros servidores HTTP.

Uno de los problemas que su creador se encontró fue que, pese a que Mongrel se volvió durante años en el servidor HTTP de referencia para Ruby on Rails, y pese a ser un stack que durante el boom de la web 2.0 de finales de la década de los 2000s y principios de 2010s creó multimillonarios, no sólo nunca obtuvo reconocimiento, sino que recibió cierto desprecio.

I wrote Mongrel and then gave it away, on the hopes that it would help a bunch of other people, and that giving it away would come back to me in some way. Maybe a job, or some respect, or hell maybe my own company doing more software like it.

Mongrel was a wild success, and lots and lots of companies are making lots and lots of money off it. It not only powered Rails, but nearly every Ruby web framework, other Ruby web servers, and was even ported to other languages. Mongrel is and was a super project and I’m really proud of it.

[…] Sadly, none of Mongrel’s success mattered for me. Even though everyone was using my software, the vast majority of firms using Mongrel were startups. The last thing a startup wants to admit is that they don’t own their intellectual property. They want everyone, especially the VCs and investors, to believe that they’re all geniuses who “innovated” everything they run.

[…] Everyone is using it, and at the same time saying I can’t code.

El resto del artículo es una genialidad y esa es la razón por la que lo he enlazado arriba, para que no se olvide nunca, incluso aunque la copia ya solo esté accesible desde el Web Archive.

El caso de SQLite

SQLite es posiblemente la base de datos más usada en todo el planeta. Es lo suficientemente pequeña como para que no sea una aplicación de red, sino que se integre directamente en las tripas del software donde se usa. En otras palabras: no es una base de datos a la que te conectas, sino que es una dependencia que agregas a tu programa y que usas llamando a funciones, como cualquier otra biblioteca dinámica de programación.

SQLite está publicada en dominio público. Su código se puede usar y tomar para cualquier otro producto, abierto o cerrado, y exprimir comercialmente todo lo que se pueda. (Tangencialmente, SQLite también es ese proyecto que se metió en un drama hace varios años porque su código de conducta estaba prácticamente basado en Los 10 mandamientos, e incluso a día de hoy sigue teniendo un código ético cuya primera regla es «amarás a Dios»; sin embargo, no parece haber razón religiosa detrás del hecho por la que es dominio público.)

Que sea tan permisivo y que no tenga ningún tipo de limitaciones en cuanto a su uso y distribución ha atraído en los últimos años a muchas empresas a derivar el código y crear nuevos motores de bases de datos a partir del SQLite original y tratar de comercializarlos como la nueva idea revolucionaria que merece recibir millones de dólares de capital. DuckDB, Deno KV, Tulso… llámalo como quieras.

Lo venden como «La nueva base de datos ultra ligera para la computación moderna». Y luego resulta que lo que han hecho es «SQLite pero te conectas a través de un puerto TCP», que es justo quitar la única ventaja que tiene SQLite frente a cualquier otra base de datos del mercado. Pero pueden hacerlo porque saben que tienen permiso para hacerlo. Y no tienen miedo de, en el camino, intentar despreciar al producto original cuyo código están desguazando para beneficiarse de él, con frases como «mejor que SQLite» o «hora de dejar atrás SQLite».

La viralidad de la GPL como arma

Frente a esto, la familia de licencias GPL tiene una condición muy importante que es la viralidad. Si derivas un código GPL para transformarlo en otra cosa, eso que hagas también tiene que estar publicado bajo la GPL, salvo que ya esté publicado con una licencia compatible. Si copias un fragmento de código GPL en tu programa de internet sin prestar atención, tu programa automáticamente se vuelve GPL o está inclumpliendo la licencia.

Y esta es la razón también por la que prácticamente cualquier gran empresa no quiere saber nada de ninguna biblioteca publicada como GPL. En el momento en el que un programa se enlaza dinámicamente a nivel sistema operativo con una biblioteca GPL, o en el momento que uno de los empleados copia de internet un fragmento de código GPL y lo inserta en lo que está escribiendo, conforman una única unidad, por lo que todo el producto también se vuelve GPL.

Esto es algo que solo afecta a trozos de código copiados sin contexto y a bibliotecas. Usar un programa GPL de forma separada e independiente no va a volver el programa principal GPL. Esa es la razón por la que, por ejemplo, Apple tradicionalmente ha distribuido Bash y otros componentes GPL con su sistema operativo. Mientras estén sueltos y no combinados, no son peligrosos.

Usar una aplicación GPL en tu empresa para depurar la API del servicio HTTP que estás desarrollando no va a volver lo que estás programando como GPL. Sin embargo, algunos abogados y departamentos de informática tienen estrés postraumático y se ven obligados a prohibir cualquier traza de GPL en una empresa.

No quiero perras, sólo quiero un uso justo y honestidad

¿Estoy dando a entender que no publico con licencias permisivas porque quiero dinero? No necesariamente. He compartido estos ejemplos para probar que lo que nació como un movimiento de «creación de software en comunidad de forma abierta» se ha convertido en un método de extracción de esfuerzo donde algunas empresas poderosas, y otras personas no tan poderosas pero sí con un MBA en su pared, se aprovechan de manera sofisticada del trabajo comunitario de otras personas evitando tomar responsabilidad en las acciones que cometen.

Sobre todo cuando se trata de tomar la dependencia escrita por un programador junior y publicada con licencia permisiva e integrarla en productos de software de lo más variados. Quieren la parte positiva del código abierto (ahorrarse costes de desarrollo), sin pensar en la parte negativa (que es que, tal como dicen tanto la licencia BSD como la MIT, que ese código no tiene ninguna garantía y se ofrece tal cual, o sea, AS IS). ¡Dios mío! El código que he tomado de internet no funciona. ¡Que alguien haga algo!

De forma parecida a lo que mencionaba con SQLite, cuando publico software como GPL, lo estoy haciendo para protegerme precisamente de este tipo de casos. No tengo problema en que haya gente que modifique el código y agregue cosas en las que no había pensado. Precisamente por eso comparto el código. Sin embargo, si alguien pretende derivar el software para compartir de forma pública su versión alterada, debe publicar el código fuente para asegurarme de que actúa de forma honesta y justa.

Conclusión

Para código trivial, implementaciones de bibliotecas que ya existen y que son dificiles de superar, o para bibliotecas de 5 líneas con algoritmos que sean fáciles de replicar, no veo problema en publicar código con licencias permisivas.

Sin embargo, para cualquier otra cosa donde el código que estoy compartiendo realmente valga la pena o haga algo único y especial, no veo a día de hoy razón para usar algo que no sea la GPL. De este modo se comparte de forma mucho más justa el código de manera que nadie intente explotar a nadie, solo mejoremos a la vez de forma colectiva.

Por qué no uso IA para la mayor parte del proceso de producción de makigas.es

lunes, septiembre 30th, 2024

Sé que este post no va a contentar a los tech-bros, pero me permite desahogarme. Además, es un buen punto al que poder citar en el futuro si surge esta pregunta y no tengo ganas de repetirme.

Sería técnicamente incorrecto decir que no uso IA en mi canal de YouTube y en makigas.es, ya que hay al menos dos instancias en las que uso IA. Por eso este post está dividido en dos partes. Primero diré las partes en las que utilizo IA en makigas.es, y las partes en las que no me planteo usar IA a pesar de que sé que son las más tediosas y las que más tiempo me toman.

(más…)

Los formularios en PDF son una mala práctica

jueves, diciembre 21st, 2023

Esta es una opinión subjetiva pero me voy a agarrar a ella y pienso morir defendiéndola: los PDF son un formato terrible para representar formularios interactivos. La administración pública parece que se ha agarrado a ellos como una lapa, y es algo que resulta entendible. Si el PDF ya representa de facto un documento digital, un PDF con formularios es visto como el equivalente digital a una hoja de papel que hay que rellenar, pero bajo mi punto de vista esto es un error.

(más…)

Mi experiencia con el Mac Mini M2 Pro

viernes, febrero 24th, 2023

He cambiado mi ordenador del trabajo por un Mac Mini M2 Pro. Ahora más que nunca, es importante que separe el uso que hago de mi ordenador cuando es para trabajar, del uso que hago de mi ordenador cuando no es para trabajar. Estos meses no me ha quedado otra que trabajar desde el ordenador de jugar, porque he descubierto que mi viejo MacBook ya no es definitivamente lo que era, pero no se podía caer en la tentación de simplemente reemplazarlo en frío sabiendo que eventualmente Apple acabaría actualizando su Mac Mini.

(más…)

Mi experiencia con Vaultwarden

viernes, febrero 10th, 2023

En abril del año pasado, migré mi gestor de contraseñas desde KeePassXC a Vaultwarden. Mi objetivo en esta entrada de blog es hablar de mi experiencia con este software y cómo me he adaptado a él en los últimos meses, desventajas y también ventajas de haber migrado a Vaultwarden.

Bitwarden es una solución cloud para guardar contraseñas en línea. Siempre he sido escéptico ante este tipo de herramientas cloud, debido al riesgo que podría suponer colocar las llaves que protegen toda tu vida digital en una máquina que no controlas. Incluso aunque Bitwarden sea abierto y hable de las formas que tienen de cifrar la información, me resulta un poco incómoda la idea de que los datos se guarden fuera de mi control.

Vaultwarden es una reimplementación alternativa de toda la API de Bitwarden en Rust. Bitwarden dispone de varias aplicaciones oficiales para PC, móvil, tablet y navegador que interactúan con la nube de Bitwarden usando distintas APIs, y Vaultwarden se ocupa de volver a implementar toda esa capa de servicios. De este modo, si configuramos un cliente o extensión de Bitwarden para que, en vez de hablar con el servidor central, hable con nuestro servidor alternativo, todo funcionará, porque el cliente no sabrá que está hablando con un Vaultwarden en vez de con un Bitwarden normal. Además, es mucho más ligera en consumo de recursos que una instalación on-premises de Bitwarden.

(más…)

Mi opinión después de probar Miniflux (RSS)

viernes, enero 20th, 2023

El mes pasado, durante mis vacaciones, reemplacé mi instancia local de TinyTinyRSS por una instancia de Miniflux. Ambas son aplicaciones cloud que actúan como lector RSS. Ya hablé la semana pasada sobre las razones por las cuales prefiero mantener mi cliente RSS en un servidor, pero se resume en que la falta de sincronización entre dispositivos que tienen Mozilla Thunderbird o QuiteRSS los hace inaceptables si unas veces leo cosas con mi PC y otras con mi móvil.

TinyTinyRSS es un pepino de software. No tiene otro calificativo. Es un software que voy a seguir recomendando y del que voy a seguir hablando bien. Es flexible, potente y tiene una interfaz de usuario web avanzada que recuerda a la de otros clientes RSS mayores y llenos de funciones. Tiene filtros con los que se pueden marcar como leídas o borrar entradas que cumplan unas condiciones (ideal para filtrar ruido), y también tiene un sistema de plugins extensible para agregarle nuevas funciones.

Sin embargo, no todo es bonito. TinyTinyRSS también es desafortunadamente un software que tiene bugs. En particular, dos veces se me ha corrompido la instalación y he tenido que tirar de copia de seguridad para rescatar mi lista de feeds y vaciar la base de datos, perdiendo el historial, las entradas marcadas como favoritas, y también parte de mi tiempo. 2 veces en 4 años tampoco es demasiado desde el punto de vista estadístico, pero sí es cierto que es una molestia que preferiría evitar.

Existen otras razones por las cuales he acabado cansándome del comportamiento de este software. Fundamentalmente tiene que ver con el proceso de instalación, especialmente ahora que está basado en Docker. Iba a contarlas aquí, pero son muchas y por otra parte se supone que quiero hablar de Miniflux hoy, así que corto y pego en otro borrador y ya lo dejo para otro día.


Miniflux es otro lector RSS cloud que puedes ejecutar en un servidor y ponerle a cargo de revisar periódicamente si los sitios que sigues tienen novedades, dejándolas en una base de datos para que las puedas leer cuando puedas.

Su interfaz web es excesivamente minimalista, pero a cambio esto le permite ser compatible con teléfonos móviles y otro tipo de pantallas táctiles, e incluso se puede instalar como PWA para un acceso más conveniente en la pantalla de iOS o Android. Tiene las funciones que se pueden esperar de este tipo de programas, e incluso tiene un sistema que permite ajustar dinámicamente la frecuencia con la que mira si una web tiene novedades según la cantidad de posts que publica a la semana (para sitios de noticias diarias cambia la frecuencia a 1 hora como mucho, y para sitios personales no suele mirar más allá de una vez cada pocos días).

Además, se puede desplegar en un único binario de Go. En mi caso, lo corro desde Docker y consume bastante menos recursos que lo que consumía TT-RSS, lo que permite aliviar la carga del servidor y lo que espero que en algún momento me ayude a ahorrar recursos y tal vez hacer downgrade a una máquina más pequeña si veo que no me hace falta tener una máquina tan potente.

También tiene APIs que me permiten usar Miniflux como un backend cuya interfaz web apenas reviso, sino que me conecto desde mi propio cliente de escritorio o de móvil como quien lee el correo. En este caso, Miniflux implementa la GReader API. Es una API mucho más flexible y potente y que me permite hacer cosas que antes no podía hacer, como suscribirme rápidamente a una fuente desde mi móvil o cancelar una suscripción si deja de interesarme un sitio web. Antes, tenía que entrar al panel de control web para poder hacer esto.

Al haber pasado a usar la GReader API, ahora puedo usar más clientes de escritorio, por lo que también he cambiado los programas que uso para leer mis noticias. En Mac y en iOS/iPad, me he pasado a NetNewsWire, que es un cliente libre y gratuito. NewsFlash también es compatible con la GReader API, de modo que en GNU/Linux he podido seguir usando NewsFlash cambiando únicamente una cuenta online por otra.

Sigo pensando que para meterse en el mundo del RSS existen opciones mucho más accesibles, como Feedly, y como he dicho varias veces, es mi opción recomendada. No obstante, para alguien que quiera ensuciarse las manos y ocuparse de instalar servicios autoalojados en su VPS o en su nube propia, Miniflux es fácil de instalar y depende únicamente de si mismo y de una base de datos PostgreSQL en la que volcar el estado de la aplicación, y que aunque tiene una interfaz web que no a todo el mundo le va a gustar, tiene más formas de ser accesible desde otras aplicaciones para no sufrirla tanto.

¿Por qué no uso Feedly pese a que lo sigo recomendando?

viernes, enero 6th, 2023

Fui usuario de Google Reader hasta prácticamente su fecha de cierre. El cierre de Google Reader es curiosamente uno de esos eventos traumáticos donde pese a que ya han pasado prácticamente 10 años desde su cierre, para quienes lo usábamos sigue siendo algo que incluir en la tarjeta de presentación. «Hola, me llamo Dani y fui usuario de Google Reader».

¿Qué fue Google Reader?, se preguntará tal vez alguien que se perdió esa época del internet mágico. Era un lector de RSS. Por ponerlo en contexto de forma breve, RSS es un protocolo que permite que una página web comunique de forma automatizada de sus novedades, por ejemplo, las últimas noticias publicadas en un periódico o los últimos posts publicados en un blog.

Un lector RSS es un programa con el que podemos «suscribirnos» a varios sitios web, y se ocupará cada pocos minutos u horas de consultar mediante protocolo RSS si la web tiene algo nuevo que no hayamos visto todavía, y que lo mostrará en pantalla como si se tratase de un cliente de correo.

La mayoría de clientes RSS hacen un buen trabajo al detectar novedades duplicadas y así saber qué hemos visto ya y qué no, y tiene memoria suficiente como para guardar docenas de artículos que podemos leer vorazmente cada día, o dejar un tiempo esperando en una cola de lectura que finalmente podemos marcar como leída de golpe y sin compasión.


Tras su desaparición, estuve un par de años utilizando Feedly. Feedly es uno de esos servicios que suelo recomendar a cualquier persona que quiera probar el mundo del RSS. Es un servicio en el que puedes tirar un par de páginas web que quieras tener al día, y que cada vez que una de esas páginas publique algo interesante te lo mostrará al abrir la aplicación.

Quizá el mayor atractivo de Feedly es el motor de descubrimiento, y la posibilidad de encontrar nuevos sitios exclusivamente a través de feeds RSS. Esta es también una de las principales razones por las que, como digo, seguiría recomendando Feedly a personas que estén entrando ahora en el mundo del RSS.

Sin embargo, pese a que lo sigo recomendando, realmente no uso Feedly. Nunca terminé de cogerle gusto. Por lo menos en este caso veo más difícil que desaparezca, debido a que aunque tiene un modo gratuito, también tiene algunas limitaciones que te invitan a pagar por él si vas a usarlo mucho. Y mientras haya gente que siga pagando por el servicio, en principio debería seguir habiendo dinero para que Feedly siga existiendo como empresa ofreciendo su producto. A estas alturas Feedly ya ha vivido más años que Google Reader, así que parece que lo están consiguiendo.

Mi principal problema con Feedly está en la cantidad de características que ofrece, y en lo confusas que son algunas de estas características. No deja de ser un software cloud, y qué software cloud hoy en día puede denominarse un «servicio» si no está constantemente reinventándose y agregando nuevas funciones o cambiando su forma de ser cada pocos años para mantenerse fresco.

Durante mis últimos tiempos con Feedly, la mayoría de funciones que me encontré, como el algoritmo de prioridades o las funciones de equipo (¿por qué activarlas para todas las cuentas en vez de preguntarme si las quiero en primer lugar?), me resultaban muy complicadas de utilizar. No quiero que un algoritmo filtre las noticias por mí; precisamente la gracia del RSS es ver, como si fuese un cliente de correo, cada uno de los artículos nuevos de los sitios que explícitamente he solicitado seguir.

En definitiva, creo que Feedly es un buen servicio, y que también es un producto que le puede gustar a la mayoría de personas que solo quieren una forma simple de consumir contenido sin complicarse con aplicaciones. Sin embargo, después de un tiempo utilizándolo, descubrí que no es para mí, y lo sustituí por otro tipo de aplicaciones que sí me eran más prácticas.

También, todo hay que ponerlo en su debido contexto. La época de Feedly y de la muerte de Google Reader es también la época del boom de las redes sociales. En esa época, como la mayoría de personas, había movido mi forma de enterarme de la actualidad a las redes sociales, fundamentalmente Twitter y Facebook, así que apenas consultaba el RSS. Sólo hace un par de años, probablemente 2018 o 2019, que volví a preocuparme por esta dieta informativa mía y decidí volver a estar más pendiente del RSS.

Mi workflow con KeePass

jueves, abril 7th, 2022

Llevo años utiliando KeePass para gestionar las contraseñas de mis sitios web. Mi base de datos tiene a estas alturas probablemente 6 o 7 años y ha sido usada a través de múltiples aplicaciones que son capaces de comprender el formato de la base de datos.

En este momento, la aplicación que utilizo en mis ordenadores para poder acceder a mi base de datos es KeePassXC. Como es multiplataforma, es muy fácil de instalar en todas partes: Windows, Linux, FreeBSD, MacOS… Por otra parte, también he usado aplicaciones para Android en el pasado, y ahora que uso iOS e iPadOS, utilizo KeePassium acceder a las contraseñas ahí.

KeePassium se vuelve mucho más directo y personal, por ejemplo, cuando se activa el desbloqueo con huella o con Face ID, para evitar tener que teclear todo el rato la contraseña. Esto también me resulta práctico si tengo que desbloquear una contraseña en algunos sitios donde no me gustaría que alguien me viese pulsar teclas en la pantalla de mi móvil, como es el transporte público. También soporta integración con el autocompletado de contraseñas nativo de iOS.

No mucha gente sabe que una base de datos de KeePass vale para algo más que para guardar usuarios y contraseñas. Cada entrada de KeePass soporta archivos adjuntos y otro tipo de datos extra, de modo que aquí algunos trucos avanzados que uso en mis bases de datos:

  • Gracias a la función de archivos adjuntos, utilizo mi base de datos de KeePass para guardar otro tipo de cosas que no son contraseñas. Una copia de mis claves SSH, una copia de mi certificado GPG, los PKCS de la administración pública, y el keychain que hace falta para firmar APKs antes de subirlos a la Google Play Store.
  • La función de atributos también es ideal para guardar notas secretas, por ejemplo, con los códigos de un solo uso necesarios para recuperar una cuenta que tenga activo el 2FA en caso de emergencia.
  • Algunas copias de seguridad de archivos sensibles, como el archivo que uso para controlar mis finanzas personales, también lo puedo cargar como adjunto en una entrada de KeePass que no tiene contraseñas ni nada.
  • Es posible utilizar KeePassXC también como proveedor OTP, en vez de aplicaciones del móvil tipo Google Authenticator. Esto lo pongo a prueba constantemente en mi ordenador del trabajo, donde tengo otra base de datos diferente para las cuentas del trabajo, y funciona de forma excelente.
  • Es posible personalizar las carpetas y las entradas con iconos propios. KeePassXC también tiene la opción de descargar automáticamente el favicon de un sitio web para emplear como icono, lo que hace más fácil ubicar una cuenta en una tabla muy grande gracias a que se puede encontrar por el icono.
  • Aparte de crear contraseñas aleatorias y asociarlas automáticamente a nuevas entradas en la base de datos, es posible usar un generador independiente que no está conectado a nada, pero que te deja igualmente copiar la contraseña generada. Empleo esta función bastante en el trabajo para generar contraseñas aleatorias cuando me piden que registre en algunas aplicaciones de intranet cuentas de usuario de otras personas, si luego voy a tener que mandarles una contraseña inicial. Al margen de que se acuerden de cambiarla o no luego, por lo menos es más seguro que iniciarla a 123456.

Dos meses usando Apple Sillicon

miércoles, abril 6th, 2022

Hace un par de meses, me cambiaron el ordenador del trabajo por un modelo más reciente. Cuando me lo renovaron, el modelo que me asignaron era uno de los recientes que utiliza la arquitectura Apple Sillicon y un procesador M1, como el que están usando ya en algunos iPad. Aquí cuento algunas de las cosas buenas y malas que me he encontrado en estos dos meses.

Cosas positivas

Mi opinión está posiblemente sesgada debido a que este ordenador no deja de ser un ordenador de trabajo. No es mío realmente, es prestado y no me pertenece, y tampoco tiene cargado software que no tenga que ver con mi trabajo, así que más allá de editores de textos, entornos de Node.js y otras aplicaciones que necesito para trabajar, no tiene gran cosa. No hay editores de vídeo, no hay juegos, no hay nada de lo que emplearía en un ordenador más personal.

También mis impresiones podrían estar sesgadas por el anterior modelo, que era un 2015, de modo que su procesador ya tiene unos cuantos años y eso puede hacer que algunos programas recientes no vayan tan bien. Y, sin embargo, lo poco que tengo lo veo con un rendimiento bastante bueno. Por hacer una comparación a base de lo que he visto en mi día a día:

  • En mi anterior ordenador tardaba en torno a unos 10 minutos en instalar Ruby a través de rbenv. Para instalar Ruby, rbenv compila Ruby desde el código fuente, así que el proceso de instalación incluye asegurarse de que hay compiladores de C instalados, descargar y compilar OpenSSL, y finalmente descargar y compilar todo el runtime de Ruby. En mi ordenador con Apple Sillicon y procesador M1, esto le toma 3 minutos, o sea, una tercera parte del tiempo.
  • En mi anterior ordenador, ejecutar una suite de tests completa del proyecto con el que más tiempo paso le podía llevar entre 20 y 25 minutos. En el Apple Sillicon, toma de 5 a 6 minutos.

De cara a la parte térmica, en dos meses todavía estoy esperando a escuchar alguna vez el ventilador de mi ordenador. Ni siquiera cuando estoy ejecutando tests más complejos o haciendo operaciones más intensas lo he llegado a escuchar. Alguna vez lo he notado un poco caliente, pero muy poco. Casi ni podría decir que se calienta mucho.

Y de batería, resulta impresionante como puedo estar toda la mañana trabajando con él sin enchufarlo a la red para luego encontrarme la batería al 70% o al 75%. Incluso lanzando servidores, corriendo tests, usando el navegador web, teniendo varias aplicaciones Electron en ejecución o entrando en videollamadas.

En cuanto a compatibilidad, existen varias aplicaciones que todavía son Intel, pero no lo notas, debido a que funcionan igual que una aplicación ARM, sin pérdida de rendimiento. Fundamentalmente, veo esto en aplicaciones Electron, donde usan algunos runtimes antiguos que todavía son Intel y que aún no han actualizado a Sillicon.

Para la línea de comandos también es posible usar binarios Intel si se ejecuta a través del wrapper arch, por ejemplo arch -arch x86_64 terraform para ejecutar una versión x86_64 de Terraform. He elegido Terraform como ejemplo, precisamente, porque algunos plugins que no estén actualizados puede que sólo tengan versión Intel en el registry; así que al final es más conveniente instalar todo Terraform como una aplicación Intel para no llevarse sorpresas cuando un Terraform ARM trata de invocar un plugin que no es compatible.

Cosas negativas

No obstante, no es oro todo lo que reluce, y aquí algunas de las cosas negativas que he encontrado en el M1 en estos meses:

  • Aunque es algo que en los últimos modelos ya están corrigiendo, mi ordenador es de primera generación, de modo que el número máximo de pantallas externas que puedo enchufar por lo general es… una y no más. Reportan que con docks compatibles con DisplayLink es posible usar más de una, pero con un cable USB-C ordinario o con un adaptador genérico HDMI a USB-C, aparte de la pantalla interna sólo se hace posible trabajar con una pantalla a la vez.
  • El único punto donde he encontrado conflictos en la compatibilidad con el procesador es, irónicamente, en línea de comandos. Todavía está pendiente de salir una versión de GCC que tenga soporte real para darwin-arm64, de modo que la única alternativa al clang es utilizar una versión de GCC en modo Intel. Por otra parte, algunas bibliotecas nativas de Node.js tienen problemas para compilar, por lo que al final lo más seguro que encuentro es emplear versiones Intel de Node.js a través de Rosetta. Tengo dos instalaciones de Homebrew, una Intel y otra ARM, por esta razón.
  • Como el procesador es ARM y no Intel, si se usa Docker o Podman se usará también un kernel Linux para ARM dentro del hipervisor, así que hay que tener esto en cuenta si los Dockerfiles no son compatibles o descargan directamente binarios para la arquitectura incorrecta.

Opinión final

No obstante, pese a que lo de que no acepte más de una pantalla en los primeros modelos es una cagada bastante grande, mi resumen general sobre el procesador M1 (y todos los que han venido detrás de él) es que es una tecnología revolucionaria. El M1 ha agitado bastante las bases de los procesadores para ordenadores normales. Quitando algunos modelos de la Surface que pueden tener un buen rendimiento parecido al de un iPad Pro, ARM hasta ahora ha sido visto principalmente como procesador para computación móvil o para ordenadores pequeños como la Raspberry Pi o los Pinebook (1). Sin embargo, para ordenadores normales de escritorio hasta ahora nunca ha habido nada excesivamente sorprendente. El M1 es uno de los primeros procesadores que busca llevar ordenadores con rendimiento equivalente a un Intel a las mesas de trabajo o de entretenimiento. Algunos fabricantes se han empezado a animar. Por ejemplo, Lenovo está preparando el lanzamiento del X13s para este 2022, un portátil general que utiliza Snapdragon que pretende darle algo de vidilla al ecosistema Windows ARM, el cual lleva existiendo varios años sin que esté destacando demasiado por el momento.


(1) En realidad, esta frase está ignorando procesadores ARM como el A64FX, el cual está siendo usado por algunos computadores como el que desde hace un par de años lidera el Top 500.

¿Por qué FreeBSD y no (x)BSD?

domingo, julio 25th, 2021

Por eliminación.

Elegí FreeBSD porque NVIDIA publica drivers para la ABI de FreeBSD. Lo que significa que puedo tener aceleración gráfica y tener mis pantallas con la resolución correcta en vez de usar el driver genérico xorg-vesa. No sirve de nada más porque NVENC no está disponible fuera de Windows y porque no uso FreeBSD para jugar.

Eso es todo. No soy un fanboy de FreeBSD y si mis casos de uso hubiesen sido otros tal vez hubiese ganado otro sistema operativo. Pero ganó este. Los tres sistemas son muy similares entre sí de todos modos.


Otros candidatos:

  • NetBSD: me gusta por su extremada simpleza, hecha para darle una perfecta portabilidad. El lema de NetBSD es “por supuesto que corre NetBSD”, haciendo referencia al hecho de que es posible instalarlo en muchísimas arquitecturas (incluso en Macs de principios de los años 90 o en Play Stations).
  • OpenBSD: lo admiro por su extrema seguridad, pero mis casos de uso con mi ordenador me llevan a admirarlo de lejos. OpenBSD es tan seguro que hace unos años eliminaron el soporte para Bluetooth porque es un protocolo inseguro y su driver no estaba bien mantenido.