Saltar al contenido principal

10 a√Īos de Electron ūüéČ

· 11 lectura mínima

El primer commit en el repositorio electron/electron fue el 13 de marzo de 20131.

Primer commit en electron/electron por @aroben

10 a√Īos y 27.147 commits m√°s de 1192 colaboradores √ļnicos despu√©s, Electron se ha convertido en uno de los frameworks m√°s populares para crear aplicaciones de escritorio hoy en d√≠a. Este hito es la oportunidad perfecta para celebrar y reflexionar sobre nuestro viaje hasta ahora, y para compartir lo que hemos aprendido en el camino.

No estaríamos aquí hoy sin todos los que han dedicado su tiempo y esfuerzo a contribuir al proyecto. Aunque los commits del código fuente son siempre las contribuciones más visibles, también tenemos que reconocer el esfuerzo de la gente que informa de errores, mantiene módulos de usuario, proporciona documentación y traducciones, y participa en la comunidad Electron a través del ciberespacio. Cada contribución tiene un valor incalculable para nosotros como mantenedores.

Antes de continuar con el resto de la entrada del blog: gracias. ‚̧ԳŹ

¬ŅC√≥mo hemos llegado hasta aqu√≠?‚Äč

Atom Shell se construy√≥ como la columna vertebral para el editor Atomde GitHub, que se lanz√≥ en beta p√ļblica en abril de 2014. Se construy√≥ desde cero como alternativa a los frameworks de escritorio basados en web disponibles en ese momento (node-webkit y Chromium Embedded Framework). Ten√≠a una caracter√≠stica estrella: contiene Node.js y Chromium para proporcionar un potente tiempo de ejecuci√≥n de escritorio para tecnolog√≠as web.

Al cabo de un a√Īo, Atom Shell empez√≥ a crecer enormemente en capacidades y popularidad. Grandes compa√Ī√≠as, startups y desarrolladores individuales hab√≠an empezado a construir aplicaciones con √©l (algunos de los primeros adoptores incluyen Slack, GitKraken, y WebTorrent), y el proyecto fue renombrado correctamente a Electron.

Desde entonces, Electron no ha parado de crecer. Aquí tienes un vistazo a nuestro recuento semanal de descargas con el tiempo, cortesía de npmtrends.com:

Gr√°fico de descargas semanales de Electron a lo largo del tiempo

Electron v1 se lanzó en 2016, prometiendo una mayor estabilidad de la API y mejores documentos y herramientas. Electron v2 se lanzó en 2018 e introdujo el versionado semántico, lo que facilita a los desarrolladores de Electron a los desarrolladores hacer un seguimiento del ciclo de lanzamiento.

En Electron v6, cambiamos a una cadencia regular de lanzamientos principales de 12 semanas para ajustarnos a la de Chromium. Esta decisión supuso un cambio de mentalidad para el proyecto, haciendo que "tener la versión más actualizada de Chromium" pasara de ser un "nice-to-have" a una prioridad. Esto ha reducido la cantidad de deuda técnica entre actualizaciones, lo que nos facilita mantener Electron actualizado y seguro.

Desde entonces, hemos sido una máquina bien engrasada, lanzando una nueva versión de Electron el mismo día que cada versión estable de Chromium. Cuando Chromium aceleró su calendario de lanzamientos a 4 semanas en 2021, pudimos encogernos de hombros y aumentar nuestra cadencia de lanzamiento a 8 semanas.

Ahora estamos en Electron v23 (y contando), y seguimos dedicados a construir el mejor tiempo de ejecuci√≥n para aplicaciones de escritorio multiplataforma. Incluso con el auge de las herramientas para desarrolladores de JavaScript en desarrolladores de JavaScript en los √ļltimos a√Īos, Electron se ha mantenido estable y ha de escritorio. Las aplicaciones de Electron son omnipresentes hoy en d√≠a: puedes programar con Visual Studio Code, dise√Īar con Figma, comunicarte con Slack y tomar notas con Notion (entre muchos otros casos de uso). Estamos incre√≠blemente orgullosos de este logro y agradecidos con todos aquellos que lo hicieron posible.

¬ŅQu√© aprendimos en el camino?‚Äč

El camino hacia la marca de la década ha sido largo y sinuoso. Aquí hay algunas claves que nos han ayudado a mantener un proyecto de código abierto grande y sostenible.

Escalando la toma de decisiones distribuida con un modelo de gobernanza‚Äč

Uno de los desaf√≠os que tuvimos que superar fue manejar la direcci√≥n a largo plazo del proyecto una vez que Electron explot√≥ en popularidad. ¬ŅC√≥mo manejamos ser un equipo de varias docenas de ingenieros distribuidos en diferentes empresas, pa√≠ses y zonas horarias?

En los primeros d√≠as, el grupo de mantenimiento de Electron depend√≠a de la coordinaci√≥n informal, lo que es r√°pido y ligero para proyectos m√°s peque√Īos, pero no es escalable para una colaboraci√≥n m√°s amplia. En 2019, cambiamos a un modelo de gobernanza donde diferentes grupos de trabajo tienen √°reas formales de responsabilidad. Esto ha sido fundamental para optimizar los procesos y asignar porciones de propiedad del proyecto a mantenedores espec√≠ficos. ¬ŅDe qu√© es responsable cada Grupo de Trabajo (WG) en la actualidad?

  • Sacar las versiones de Electron (Releases WG)
  • Actualizar Chromium y Node.js (Upgrades WG)
  • Supervisar el dise√Īo de la API p√ļblica (API WG)
  • Mantener Electron seguro (Security WG)
  • Administrar el sitio web, documentaci√≥n y herramientas (Ecosystem WG)
  • Alcanzar a la comunidad y a las empresas (Outreach WG)
  • Moderaci√≥n de la comunidad (Community & Safety WG)
  • Mantener nuestra infraestructura de compilaci√≥n, herramientas de mantenedor y servicios en la nube (Infrastructure WG)

Alrededor de la misma época en que cambiamos al modelo de gobernanza, también trasladamos la propiedad de Electron de GitHub a la OpenJS Foundation. Aunque el equipo principal original todavía trabaja en Microsoft hoy en día, son solo una parte de un grupo más grande de colaboradores que forman la gobernanza de Electron.

Si bien este modelo no es perfecto, nos ha funcionado bien a través de una pandemia global y vientos macroeconómicos en curso. En el futuro, planeamos renovar la carta de gobernanza para guiarnos a través de la segunda década de Electron.

info

Si quieres saber m√°s, ¬°echa un vistazo al repositorio electron/governance!

Comunidad‚Äč

La parte de la comunidad de código abierto es difícil, especialmente cuando tu equipo de divulgación está compuesto por una docena de ingenieros disfrazados con una gabardina que dice "gerente de comunidad". Dicho esto, ser un proyecto de código abierto grande significa que tenemos muchos usuarios, y aprovechar su energía para construir un ecosistema de usuarios para Electron es una parte crucial para mantener la salud del proyecto.

¬ŅQu√© hemos estado haciendo para desarrollar nuestra presencia en la comunidad?

Construyendo comunidades‚Äč

  • En 2020, lanzamos nuestro servidor de Discord. Anteriormente ten√≠amos una secci√≥n en el foro de Atom, pero decidimos tener una plataforma de mensajer√≠a m√°s informal para tener un espacio para discusiones entre mantenedores y desarrolladores de Electron, as√≠ como para obtener ayuda general de depuraci√≥n.
  • En 2021, establecimos el grupo de usuarios de Electron China con la ayuda de @BlackHole1. Este grupo ha sido fundamental para el crecimiento de Electron en usuarios de la floreciente escena tecnol√≥gica de China, proporcionando un espacio para que colaboren en ideas y discutan sobre Electron fuera de nuestros espacios en ingl√©s. Tambi√©n nos gustar√≠a agradecer a cnpm por su trabajo en apoyar las versiones nocturnas de Electron en su espejo chino para npm.

Participar en programas de c√≥digo abierto de alta visibilidad‚Äč

  • Desde 2019 hemos estado celebrando el Hacktoberfest cada a√Īo. Hacktoberfest es una celebraci√≥n anual de c√≥digo abierto organizada por DigitalOcean, y desde 2019 hemos estado participando en ella. Cada a√Īo recibimos docenas de entusiastas contribuyentes que buscan dejar su huella en el software de c√≥digo abierto.
  • En 2020, participamos en la primera iteraci√≥n de Google Season of Docs, donde trabajamos con @bandantonio para reorganizar el flujo del tutorial de usuario nuevo de Electron.
  • En 2022, mentorizamos a un estudiante en el programa Google Summer of Code por primera vez. @aryanshridhar realiz√≥ un trabajo incre√≠ble al refactorizar la l√≥gica de carga de la versi√≥n principal de Electron Fiddle y migrar su empaquetador a webpack.

¬°Automatiza todas las cosas!‚Äč

Hoy en d√≠a, la gobernanza de Electron cuenta con alrededor de 30 mantenedores activos. Menos de la mitad de nosotros somos contribuidores a tiempo completo, lo que significa que hay mucho trabajo para compartir. ¬ŅCu√°l es nuestro truco para mantener todo funcionando sin problemas? Nuestro lema es que las computadoras son baratas y el tiempo humano es caro. Al estilo t√≠pico de los ingenieros, hemos desarrollado una serie de herramientas de soporte automatizadas para facilitar nuestras vidas.

Not Goma‚Äč

La base de c√≥digo principal de Electron es un gigante de c√≥digo en C++, y los tiempos de compilaci√≥n siempre han sido un factor limitante en la velocidad con la que podemos implementar correcciones de errores y nuevas funcionalidades. En 2020, implementamos Not Goma, una plataforma personalizada espec√≠fica para Electron para el servicio de compilador distribuido de Google llamado Goma. Not Goma procesa las solicitudes de compilaci√≥n de las m√°quinas autorizadas de los usuarios y distribuye el proceso en cientos de n√ļcleos en el backend. Adem√°s, Not Goma tambi√©n almacena en cach√© el resultado de la compilaci√≥n para que alguien m√°s que compile los mismos archivos solo necesite descargar el resultado precompilado.

Desde que lanzamos Not Goma, los tiempos de compilación para los mantenedores han disminuido de varias horas a unos pocos minutos. ¡Una conexión estable a internet se convirtió en el requisito mínimo para que los contribuyentes pudieran compilar Electron!

info

Si eres un contribuidor de código libre, puedes probar Not Goma's cache de lectura, el cual está disponible de forma predeterminada con h Electrón Build Tools.

Autenticaci√≥n de Factor Continuo‚Äč

Autenticación de Factor Continuo (CFA) es una capa de automatización en torno al sistema de autenticación de dos factores (2FA) de npm que combinamos con semantic-release para gestionar lanzamientos seguros y automatizados de nuestros diversos paquetes npm de @electron/.

Mientras que semantic-release ya automatiza el proceso de publicación de paquetes de npm, requiere desactivar la autenticación de dos factores o pasar un token secreto que evita esta restricción.

Construimos CFA para entregar una contrase√Īa de un solo uso basada en el tiempo (TOTP) para el 2FA de npm a trabajos de integraci√≥n continua (CI) arbitrarios, lo que nos permite aprovechar la automatizaci√≥n de semantic-release manteniendo la seguridad adicional de la autenticaci√≥n de dos factores.

Usamos CFA con una interfaz integrada en Slack, lo que permite a los mantenedores validar la publicación de paquetes desde cualquier dispositivo en el que tengan Slack, siempre y cuando tengan su generador de TOTP a mano.

info

¡Si quieres probar CFA en sus propios proyectos, consulte el repositorio de GitHub o la documentación! Si utilizas CircleCI como proveedor de CI, también tenemos un práctico orb para configurar rápidamente un proyecto con CFA.

Sheriff‚Äč

Sheriff es una herramienta de código abierto que escribimos para automatizar la gestión de permisos en GitHub, Slack y Google Workspace.

La propuesta de valor clave de Sheriff es que la gesti√≥n de permisos debe ser un proceso transparente. Utiliza un √ļnico archivo de configuraci√≥n YAML que designa los permisos en todos los servicios mencionados anteriormente. Con Sheriff, obtener el estado de colaborador en un repositorio o crear una nueva lista de correo es tan f√°cil como obtener la aprobaci√≥n y la fusi√≥n de una PR.

Sheriff también cuenta con un registro de auditoría que se publica en Slack, alertando a los administradores cuando ocurre actividad sospechosa en cualquier lugar de la organización Electron.

... y todos nuestros bots de GitHub‚Äč

GitHub es una plataforma con una amplia extensibilidad de API y un marco de aplicaci√≥n de bot de "first-party" llamado Probot. Para ayudarnos a enfocarnos en las partes m√°s creativas de nuestro trabajo, creamos una suite de bots m√°s peque√Īos que nos ayudan a realizar el trabajo sucio. Aqu√≠ hay algunos ejemplos:

  • Sudowoodo automatiza el proceso de lanzamiento de Electron de principio a fin, desde el inicio de compilaciones hasta la carga de activos de lanzamiento en GitHub y npm.
  • Trop automatiza el proceso de retroportar para Electron al intentar seleccionar parches a ramas de lanzamiento anteriores basadas en las etiquetas de PR de GitHub.
  • Roller automatiza las actualizaciones rodantes de las dependencias de Chromium y Node.js de Electron.
  • Cation es nuestro bot de verificaci√≥n de estado para las PR de electron/electron.

¬°En conjunto, nuestra peque√Īa familia de bots nos ha dado un gran impulso en la productividad de los desarrolladores!

¬ŅQu√© sigue?‚Äč

Al entrar en nuestra segunda d√©cada como proyecto, es posible que te preguntes: ¬Ņqu√© sigue para Electron?

Vamos a mantenernos en sincron√≠a con el ritmo de lanzamiento de Chromium, publicando nuevas versiones principales de Electron cada 8 semanas, manteniendo el framework actualizado con lo √ļltimo y lo mejor de la plataforma web y Node.js mientras mantenemos la estabilidad y seguridad para aplicaciones de calidad empresarial.

Generalmente anunciamos noticias sobre próximas iniciativas cuando se vuelven concretas. ¡Si quieres estar al tanto de futuros lanzamientos, funciones y actualizaciones generales del proyecto, puedes leer nuestro blog y seguir nuestros perfiles en redes sociales (Twitter y Mastodon)!


  1. Este es en realidad el primer commit del proyecto electron-archive/brightray project, que se incorpor√≥ a Electron en 2017 y tuvo su historial de git fusionado. Pero, ¬Ņqui√©n est√° contando? ¬°Es nuestro cumplea√Īos, as√≠ que nosotros hacemos las reglas!‚Ü©