El doble licenciamiento de Bitwarden: 823 archivos comerciales, 52 archivos ocultos en el paquete y las 95 rutas que la versión libre nunca entrega

Bitwarden anunció el 9 de octubre de 2026 que las apps de las tiendas pasarían a ser compilaciones con licencia comercial. La licencia del repositorio no ha cambiado desde 2022 —su historial tiene tres commits—, así que la noticia real está antes del anuncio: la versión autohospedada web-v2026.9.1 ya publica dos artefactos y el comercial incluye 52 archivos, 2.164 cadenas y 95 rutas que el libre no tiene, como /secrets, /key-connector, 11 proveedores SAML y 10 integraciones SIEM. La empresa dice que el cambio 'solo afecta a quienes reempaquetan y revenden', y a la vez que las funciones futuras 'existirán solo en esa compilación'.

El 9 de octubre de 2026, una cuenta del equipo de Bitwarden publicó en el foro oficial un aviso de cinco líneas: «Starting in the next release, the Bitwarden apps published to the various stores will be the commercially licensed builds. No action is needed, and the apps will work exactly as they do today.» Es el tipo de texto que parece una nota administrativa. No lo es. En menos de un día el hilo acumulaba 52 mensajes y 40.121 visitas, y en Hacker News llegó a 338 puntos y 244 comentarios, la mayoría interpretándolo como el primer paso de un «rug pull».

Lo interesante no es el anuncio. Es que lo que el anuncio describe lleva tiempo ocurriendo, y se puede medir.

Descargué los dos artefactos autohospedados de la web que Bitwarden publicó el 30 de septiembre de 2026 —once días antes del aviso—, los descomprimí, comparé archivo por archivo y contrasté cada cadena de texto de cada paquete JavaScript sin sourcemap. El artefacto comercial ya contiene funciones que el libre no tiene. Y los archivos de licencia del repositorio suman tres commits en total: uno de 2016, la preparación del directorio en 2022 y una corrección de referencia en 2025. Bitwarden no volvió a licenciar su código. Cambió qué compilación entrega a las tiendas, y la asimetría entre sus dos compilaciones es anterior y más amplia de lo que el anuncio admite.

La versión corta

AfirmaciónLo que muestran los artefactos y el texto de la licencia
Las «compilaciones con licencia comercial» son nuevasLa división no es nueva: web-v2026.9.1 ya publicó a la vez -selfhosted-COMMERCIAL.zip y -selfhosted-open-source.zip el 30/09/2026
«All current features are available in both versions»El paquete comercial web tiene 52 archivos y 95 rutas que el libre no tiene: Secrets Manager, Key Connector, integraciones SAML/SCIM/SIEM y la guía de despliegue de extensiones con Intune
El repositorio cambió de licenciaLICENSE.txt tiene 3 commits en toda su historia (10/10/2016, 09/05/2022, 01/05/2025). LICENSE_GPL.txt tiene 1. El esquema dual nace en septiembre de 2020 / mayo de 2022
La licencia permite usar esas compilacionesLa Bitwarden License v1, §2.1, concede su uso «for the sole purposes of internal development and internal testing, and only in a non-production environment»
El cambio «solo afecta a quienes reempaquetan y revenden»El mismo equipo escribió: «Some future components will be published under the commercial license and will exist only in that build» y «Direct downloads from the Download … page will also be under the commercial license»
Puedes conseguir la compilación libre por un canal sin tiendaF-Droid no tiene ningún cliente Bitwarden (/packages/com.x8bit.bitwarden/ devuelve 404). El tarball de código del navegador se descargó 44 veces frente a 488 del zip de la tienda

Qué dice la licencia, con el texto delante

Los repositorios de cliente de Bitwarden llevan años con doble licencia, y el arreglo está explicado en un LICENSE.txt de 820 bytes:

Source code in this repository is covered by one of two licenses: (i) the GNU General Public License (GPL) v3.0 (ii) the Bitwarden License v1.0. The default license throughout the repository is GPL v3.0 unless the header specifies another license. Bitwarden Licensed code is found only in the /bitwarden_license directory.

La segunda licencia se titula «BITWARDEN LICENSE AGREEMENT Version 1, 4 September 2020». Su cláusula operativa es corta y, para quien piense ejecutar una compilación comercial, inesperadamente estrecha:

2.1 Commercial Module License. Subject to Your compliance with this Agreement, Bitwarden hereby grants to You a limited, non-exclusive, non-transferable, royalty-free license to use the Commercial Modules for the sole purposes of internal development and internal testing, and only in a non-production environment.

La sección 2.3 prohíbe vender, alquilar, arrendar, distribuir, sublicenciar, prestar o transferir de cualquier otro modo los Commercial Modules, eliminar marcas registradas, o «use the Commercial Modules to create a competing product or service». La 3.1 establece que el acuerdo «will automatically terminate upon notice from Bitwarden». La 5.7 regula los derechos restringidos del Gobierno de EE. UU. y la 5.8 contempla medidas cautelares por incumplir la sección 2.

Leído en conjunto, se entiende la forma del movimiento. La Bitwarden License es un control sobre la redistribución comercial, no una licencia de usuario final. Está diseñada para que nadie tome los binarios ya compilados y sus módulos empresariales y los revenda. Lo que no contiene es ninguna cláusula que otorgue al usuario gratuito el derecho a ejecutar esos módulos en producción. La tranquilidad de que las apps de las tiendas «work exactly as they do today» es una afirmación sobre el comportamiento, no sobre el permiso legal.

Un participante del foro, DenBesten, detectó la misma ambigüedad en horas: «The statement, apps published to the various stores will be the commercially licensed builds sounds to me like License_Bitwarden.txt will replace Terms of Service… I don’t think either of these are what you mean, but it is how it reads to me.» No hubo una aclaración posterior que abordara el texto de la licencia en sí.

La medición: dos artefactos, una release, 52 archivos de distancia

La API de releases de GitHub entrega los dos paquetes de la misma etiqueta. Los descargué y eché las cuentas.

COMERCIALcódigo abiertodiferencia
Descarga comprimida46.666.753 B45.194.349 B+1.472.404 (+3,26%)
Entradas en el zip383366+17
Entradas sin sourcemaps350341+9
Bytes sin sourcemaps87.315.05185.518.655+1.796.396 (+2,10%)
Total descomprimido175.327.050168.572.335+6.754.715
build/app/main.js6.359.6395.870.286+489.353 (+8,34%)
Mayor bloque de dependencias16.092.10415.767.369+324.735
Un payload .wasm7.720.3407.574.853+145.487

A nivel de archivo: 52 archivos existen solo en el zip comercial, 35 solo en el libre (paquetes renombrados cuyo hash cambió) y 3 existen en ambos con contenido distinto. Uno de los archivos exclusivos del comercial es el aviso de licencia de Chart.js v4.5.1 —una librería de gráficas, lo que ya insinúa qué tipo de pantallas no tiene la compilación libre.

Los recuentos de archivos son toscos, porque los paquetes minificados se renombran en cada build. Así que comparé las cadenas de texto: extraje todas las cadenas ASCII entrecomilladas de 6 a 70 caracteres de cada .js sin sourcemap en ambos zips y calculé la diferencia de conjuntos.

  • 25.973 cadenas distintas en la compilación comercial frente a 24.103 en la libre
  • 2.164 cadenas aparecen solo en la comercial
  • 294 cadenas aparecen solo en la libre

Esa asimetría es el hallazgo. El paquete comercial es un superconjunto en sustancia, no una recompilación con distintos hashes. Y entre esas 2.164, las rutas no admiten discusión: 95 cadenas con forma de ruta existen solo en la compilación comercial:

Capacidad exclusiva del comercialCadenas representativas
Secrets Manager/secrets, /secrets/delete, /projects, /service-accounts, /access-tokens, /access-tokens/revoke, /access-policies/service-accounts, /sm/events/service-accounts/, help/secrets-manager-cli
Proveedores SAML / SSO (11)saml-adfs, saml-auth0, saml-aws, saml-azure, saml-duo, saml-google, saml-jumpcloud, saml-keycloak, saml-okta, saml-onelogin, saml-pingfederate
SIEM / exportación de eventos (10)splunk-siem, sumo-logic-siem, datadog-siem, crowdstrike-siem, elastic-siem, huntress-siem, panther-siem, rapid7-siem, microsoft-sentinel-siem, blumira-siem
Aprovisionamiento SCIM (6)about-scim, okta-scim-integration, microsoft-entra-id-scim-integration, onelogin-scim-integration, ping-identity-scim-integration, jumpcloud-scim-integration
Sincronización de directorios (4)ldap-directory, okta-directory, onelogin-directory, workspace-directory
Key Connector/key-connector, help/about-key-connector
Access Intelligence / insights de riesgo/images/access-intelligence/dashboard-overview.svg, /videos/access-intelligence-assign-tasks.mp4, /videos/risk-insights-mark-as-critical.mp4
Informes/reports/member-access/, /reports/member-cipher-details/, /reports/password-health-report-application/
Consola de proveedor / MSP/providers/setup
Papelera de elementos/trash, /trash/empty, /trash/restore
Documentación de desplieguedeploy-browser-extensions-with-intune, github-actions-integration, gitlab-integration, http-event-collector, claimed-accounts, claimed-domains

(En total, 43 URL de bitwarden.com/help/... aparecen solo en el paquete comercial.)

Conviene ser preciso sobre qué demuestra esto y qué no. La presencia de una cadena en un paquete minificado es un buen indicador de capacidad entregada y un mal indicador de interfaz alcanzable: una ruta puede existir en código muerto. Lo que establece sin discusión es que los dos artefactos no son el mismo programa. Quien ejecutara la bóveda web autohospedada libre en septiembre de 2026 no tenía en su paquete las rutas de Secrets Manager, Key Connector, consola de proveedor, papelera, paneles de riesgo ni esas 11 integraciones SAML y 10 SIEM.

Esas son, por casualidad o no, exactamente las funciones por las que las empresas pagan. La palabra que carga con el peso en «all current features are available in both versions» es current, como señaló un usuario del foro — y la diferencia entre artefactos demuestra que esa frontera ya estaba trazada antes del anuncio, caso por caso, justo como ahora se dice que se decidirán las funciones futuras.

A quién afecta realmente

El alcance declarado del anuncio cabe en una frase: «the licensing change affects those who are repackaging and reselling Bitwarden». Las demás declaraciones del equipo describen algo más amplio. Cito las dos, porque no pueden ser igual de estrechas a la vez.

PerfilQué cambiaPeso de la evidencia
Usuario gratuito en App Store o Play StoreLa próxima versión entrega la compilación comercial; el comportamiento no cambia; la licencia aplicable pasa a ser la Bitwarden License v1, cuya §2.1 no cubre el uso en producciónAlto — anuncio + texto de licencia
Suscriptor Premium / FamiliesSi una función está marcada como comercial, «they must install the commercial license version of the Bitwarden app to access them»Alto — declaración explícita
Administrador con servidor GPLv3 autohospedado«no change to self-hosting» — pero el artefacto libre ya carece de las rutas empresariales listadas arribaAlto — declaración + artefacto medido
MSP o proveedor que reempaquetaEl objetivo declarado: la §2.3 prohíbe distribuir los Commercial Modules; el código GPLv3 sigue siendo bifurcable bajo otra marcaAlto — el texto es explícito
Distribución Linux / FlatpakSin respuesta. Un mantenedor preguntó directamente: «What version does the Linux Flatpak store receive?» No hay respuesta del equipo en el hiloSin resolver
Empresa que estandariza 50 puestosRiesgo de precio y riesgo de frontera de funciones; ambos quedan declarados como «case-by-case» de aquí en adelanteMedio — inferencia de la política declarada

Dos cosas de esa tabla merecen énfasis. Primera: la cuarta fila es el único punto donde la licencia hace algo nítido — si redistribuyes los módulos comerciales, quedas fuera de la concesión, y punto. Segunda: el anuncio nunca dice qué compilaciones de tienda, y el equipo tuvo que averiguarlo; la respuesta a «Will the Portable Desktop App link on Bitwarden’s Download Page download a build that is commercially licensed or OSS licensed?» fue «That’s a great question. I’ll work to get that information», seguida de una edición: «The download page will also direct link to the commercial license».

A 11 de octubre de 2026, esa promesa no se ve. Cargué bitwarden.com/download/ en un navegador headless real, hice scroll y busqué tanto el texto renderizado como el HTML completo: cero apariciones de «license», «GPL» o «commercial». La página sigue anunciando el plan gratuito y el compromiso «free forever». Al margen de lo demás, la información que la empresa dijo que añadiría no había llegado dos días después. Es un detalle pequeño que pesa mucho en un producto de seguridad: la única señal fiable sobre qué licencia rige el binario que tienes en la mano es un hilo del foro.

Las salidas alternativas, y cuánta gente las usa de verdad

Toda historia de cambio de licencia produce una lista de canales alternativos. Para Bitwarden se suelen citar tres. Dos no existen tal como se supone.

F-Droid. No hay ningún cliente Bitwarden en F-Droid. La ruta canónica del paquete devuelve 404 y una búsqueda de «bitwarden» en el índice devuelve SelfPrivacy, PassVault, AIPOS Password Manager, Monica F-Droid y Anywherelan: ninguno es Bitwarden. La app oficial de Android vive en Play Store y, para quien compila, en bitwarden/android (9.466 estrellas, GPL-3.0). Si quieres un cliente Android sin tienda, lo compilas tú.

Los tarballs de código. La release del navegador publica browser-source-2026.9.3.zip. Su contador de descargas en GitHub: 44, frente a 488 del zip de distribución para Chrome. Compilar desde el código está técnicamente disponible y empíricamente poco frecuentado — el mismo patrón que medí en el análisis de la compra de Deno por Cloudflare, donde la salida de emergencia por la que nadie pasa es el hallazgo más fiable de los datos.

El paquete autohospedado libre. Aquí los números casi empatan: 158 descargas para web-2026.9.1-selfhosted-open-source.zip frente a 135 para el comercial. La vía GPLv3 está viva. Es un 3% más pequeña, le faltan 52 archivos y —según el diff de rutas— le falta la mitad empresarial de la bóveda web.

Mientras tanto, el canal de descarga directa supera con holgura al de las tiendas en los contadores de GitHub: el .exe instalable de Windows muestra 114.497 descargas, el .dmg universal de macOS 72.017, la compilación portátil 19.099, el .deb 8.357, el AppImage 1.741 — mientras los .appx de Microsoft Store quedan en 222, 96 y 46. La interpretación exige cautela (los actualizadores automáticos acceden a los assets de release y las instalaciones desde tienda no pasan por GitHub), pero algo queda claro por la propia edición del equipo: los binarios de la página de descargas también pasan a ser comerciales. El canal con mayor uso medido es el que pierde la compilación libre, no el que la conserva.

Veintiséis semanas de contexto que explican el momento

Nada de lo anterior explica por qué ahora. El registro público alrededor de Bitwarden en 2026 sí.

  • Febrero de 2026 — El veterano CEO Michael Crandell pasa a un rol de asesoría, sin anuncio; solo se sabe por LinkedIn. Le sustituye Michael Sullivan, exdirector de Acquia e Insightsoftware, cuyo perfil encabeza su experiencia en fusiones y adquisiciones «including direct experience with leading PE firms».
  • Marzo de 2026 — El precio de Premium aproximadamente se duplica, anunciado dentro de un anuncio de funciones y no como cambio de precios, con aviso a los clientes unos quince días antes de la renovación; un comentarista de este hilo de Hacker News cita su propia factura pasando de 10 a 19,80 dólares al año.
  • Mediados de abril de 2026 — «Always free» desaparece de la página del gestor personal.
  • 4 de mayo de 2026 — El acrónimo de valores internos pasa de Gratitude, Responsibility, Inclusion, Transparency a Gratitude, Responsibility, Innovation, Trust.
  • 9 de octubre de 2026 — Las compilaciones de tienda y de la página de descargas pasan a licencia comercial.

Contra ese telón, el lenguaje del propio anuncio revela más que cualquier lectura crítica. Preguntados por qué funciones podrían quedar en exclusiva comercial, el equipo respondió: «It’ll be evaluated on a case-by-case basis, but you’ll see some new products released soon — including a government version of Bitwarden — where having this license will give Bitwarden the legal protection it needs.» Es una razón de negocio coherente. También es, literalmente, la constatación de que el plan va más allá de los reempaquetadores.

La empresa hizo además algo poco habitual en estas situaciones: dar la razón en público a una crítica. Un usuario propuso publicar ambas compilaciones en las tiendas para que cada quien eligiera, advirtiendo de que imponer la comercial atrae «bad press». El equipo respondió: «This is a pretty good idea! I know it’ll basically double the deployment team’s workload, but I’ll take this back to leadership as a recommendation.» A la hora de escribir esto no hay seguimiento en el hilo.

El mejor argumento a favor, y qué lo zanjaría

Es tentador leer todo cambio de licencia como hostilidad. Casi nunca es tan simple, y la versión honesta de esta historia incluye el caso a favor.

A Bitwarden llevan años reempaquetándolo y revendiéndolo actores que no aportan nada aguas arriba. Un producto de seguridad que quiere negocio público necesita lenguaje contractual, indemnizaciones y límites de responsabilidad que la GPLv3 excluye expresamente — la §4 de la Bitwarden License rechaza garantías y la §5.7 trata precisamente los derechos restringidos del gobierno. Y los módulos comerciales —SSO, SCIM, Secrets Manager— son los que pagan las empresas; los mismos que llevaban años bajo /bitwarden_license en el repositorio público, legibles y auditables por cualquiera. «Código disponible con restricción de uso comercial» no es «código cerrado», y confundir ambos hace que la crítica sea más fácil de desestimar de lo que merece.

Así que la discrepancia no es sobre la licencia. Es sobre la selección: qué funciones van a cada compilación, decidido por quién y comunicado cómo. Eso es comprobable, y barato de comprobar. Esta es la lista que aplicaría a la próxima versión.

Evidencia de que la compilación libre se mantiene de verdad y en pie de igualdad

  1. La próxima versión sigue publicando -selfhosted-open-source.zip, y sus bytes sin sourcemaps siguen creciendo en lugar de congelarse.
  2. El diff de rutas y cadenas entre ambos zips no se amplía hasta incluir funciones de la bóveda personal. El actual tiene forma empresarial: SSO, SCIM, Secrets Manager, consola de proveedor. Si /trash fuera la única anomalía y mañana se le sumara /vault o el autorrelleno, la historia sería otra.
  3. El repositorio GPLv3 sigue recibiendo commits de funciones, y kspearrin (7.187 commits, 32,3% del total del top-100) —el fundador, todavía CTO— permanece en el historial.
  4. La publicación en tiendas pasa a ser una elección: dos compilaciones, dos nombres, como propuso la comunidad.

Evidencia de que la preocupación era correcta

  1. Capacidad esencial de la bóveda personal se mueve a la compilación comercial.
  2. El artefacto autohospedado libre deja de publicarse, o su línea de versión se estanca mientras avanza la comercial.
  3. Los cambios de protocolo cliente-servidor rompen servidores de terceros. Ya ocurrió: el cliente web rompió la compatibilidad con Vaultwarden al menos una vez, registrado en el issue #7607 de dani-garcia/vaultwarden. La deriva de protocolo es el poder blando de esta situación; nadie tiene que anunciarla.
  4. Los repositorios GPLv3 se relicencian a una licencia source-available (BUSL/SSPL), que fue el patrón de Redis, Elastic y Terraform al que los comentaristas de Hacker News recurrieron de inmediato. Un comentarista que dijo haber estado en Redis durante su primer cambio de licencia contó que pidió a la dirección mantener el núcleo en BSD y dividir en lugar de cambiar.

Ambas columnas son baratas de revisar en cualquier release. El cuarto punto de la segunda es el que hay que vigilar con más atención, porque es el momento en que «aún puedes bifurcarlo» deja de ser cierto — y «aún puedes bifurcarlo» fue la respuesta del equipo a la pregunta por el rug pull.

Cómo comprobar tu propia compilación en cinco minutos

Todo lo de este artículo es reproducible sin accesos especiales. Si ejecutas Bitwarden en algún sitio, estas son las comprobaciones que vale la pena automatizar.

# 1. ¿Qué licencia rige el repositorio desde el que compilas?
curl -sL https://raw.githubusercontent.com/bitwarden/clients/main/LICENSE.txt

# 2. ¿Cuánto del repo es exclusivamente comercial? (API de árbol, recursiva)
curl -s "https://api.github.com/repos/bitwarden/clients/git/trees/main?recursive=1" \
  | grep -c '"path": "bitwarden_license/'

# 3. ¿Siguen difiriendo los dos artefactos autohospedados, y cuánto?
#    (descarga ambos assets de la última release web-v*, luego:)
unzip -l web-*-selfhosted-COMMERCIAL.zip  | tail -1
unzip -l web-*-selfhosted-open-source.zip | tail -1

# 4. ¿Qué rutas empresariales están en uno y no en el otro?
for z in web-*-selfhosted-*.zip; do
  echo "== $z"; unzip -p "$z" 'build/app/main.*.js' \
    | grep -o -E '/(secrets|projects|service-accounts|access-tokens|key-connector|providers/setup|trash)' \
    | sort -u
done

Tres cosas que no puedes comprobar hoy, y deberías: si la página de descargas te dice qué licencia vas a aceptar (no lo hace), si una actualización de tienda cambió tu compilación de GPLv3 a comercial sin avisar (no hay indicador de licencia en la app) y qué recibe un Flatpak o Snap de Linux (sin respuesta en el hilo). Para un producto cuyo argumento entero es la verificabilidad, esa es la parte que conviene exigir — más que la licencia en sí.

Preguntas frecuentes

¿Bitwarden relicenció su código? No. El repositorio tiene doble licencia desde que apareció la Bitwarden License en septiembre de 2020, con el arreglo del directorio /bitwarden_license consolidado en mayo de 2022. LICENSE.txt suma tres commits en toda su historia, el último una corrección de referencias de mayo de 2025.

¿El código sigue siendo legible? Sí, todo, incluidos los módulos comerciales, que permanecen en GitHub. «Código disponible con restricciones de uso comercial» no equivale a código cerrado, y el equipo lo dice sin ambigüedad: «Code under the commercial license is just as viewable and transparent on GitHub.»

¿Entonces hay un fork que pueda usar? La parte GPLv3 es bifurcable hoy, sin las marcas — y por eso la cláusula de marcas y la compatibilidad de protocolo importan más que el texto de la licencia. Conviene notar además qué pasó con el cliente alternativo más citado: Keyguard (3.443 estrellas, 12 watchers) tiene código disponible pero, según un comentarista del hilo que lo verificó, está totalmente copyrightado: tampoco es una salida FOSS.

¿Sobrevivirá el plan gratuito? El equipo: «The free plan is here to stay permanently.» La misma fórmula aparecía en la web hasta que «Always free» se retiró en abril de 2026, así que conviene ponderar los compromisos escritos en su justa medida.

Me autohospedo, ¿debería cambiarme? Solo si necesitas una capacidad concreta que vive en la compilación comercial, o si el artefacto libre deja de publicarse. Con el servidor autohospedado GPLv3 conservas la bóveda central: la brecha medida tiene forma empresarial. Si dependes de Vaultwarden, el riesgo operativo es la deriva del protocolo del cliente, lo que aconseja fijar versiones de cliente y exportar la bóveda con regularidad en lugar de migrar con prisa.

¿Qué es lo más informativo que se puede vigilar? La diferencia en bytes entre los dos zips -selfhosted- de cada release web-v*. Es público, es aritmética y se actualiza minutos después de cada publicación. Ahora mismo dice: +52 archivos, +2.164 cadenas, +95 rutas, todas empresariales.

La conclusión

La versión ruidosa de esta historia —«Bitwarden se cierra»— es incorrecta en los hechos. La versión silenciosa es más interesante: un gestor de contraseñas cuyo modelo entero de confianza se apoya en la verificabilidad entregó dos programas distintos bajo dos licencias distintas durante al menos once días antes de contarlo, puso el más capaz en los canales por los que la gente realmente instala, y adjuntó una licencia cuya cláusula de uso en producción no cubre a quienes ahora la reciben. Y el repositorio sobre el que todos discuten está, byte a byte, intacto.

La respuesta correcta no es el pánico ni la deferencia. Es tratar los artefactos de release como la fuente de verdad y revisarlos, porque a diferencia de una tranquilidad en un foro o una página de privacidad, un archivo zip de 46.666.753 bytes no se puede redactar con cuidado. Simplemente es lo que es — y esta semana dijo más que el anuncio.