Il 29 gennaio 2011 la community di Hudson ha votato 214 a 14 per rinominare il progetto in Jenkins, staccandolo dall’infrastruttura e dal marchio in mano a Oracle (proposta dell’11 gennaio). Il primo rilascio col nuovo nome — Jenkins 1.396, derivato dritto da Hudson 1.395 — è di questi giorni. Il codice ha sempre avuto una licenza libera; a rompersi è stato tutto il resto.
Contesto
Hudson è un server di continuous integration scritto in Java da Kohsuke Kawaguchi in Sun Microsystems, a partire dal 2005. Negli anni è diventato lo strumento di CI open source più diffuso: architettura a plugin, build distribuito master/slave, interfaccia web essenziale, integrazione con i principali strumenti di build Java. La licenza è MIT, quindi chiunque può copiare, modificare e ridistribuire il sorgente.
Nel gennaio 2010 Oracle ha chiuso l’acquisizione di Sun. Hudson è finito sotto Oracle insieme al resto del portafoglio Sun, e con lui le proprietà attorno al progetto che la licenza del codice non copre: il marchio “Hudson” e l’hosting su java.net.
Il problema
L’attrito è nato su un terreno che la licenza MIT non tocca: dove vive il progetto e come si chiama.
Nell’autunno 2010 i committer hanno avuto problemi ripetuti con l’infrastruttura java.net. Una migrazione interna verso il sistema Kenai ha lasciato gli sviluppatori senza accesso al repository per qualche tempo; l’avviso mandato a Kawaguchi era finito su un indirizzo non più valido, e nessun altro era stato informato (Kawaguchi, 23 novembre 2010). La community ne ha discusso sulla mailing list e ha deciso di spostare il sorgente su GitHub e le liste su Google Groups e Nabble, senza obiezioni di peso per quasi una settimana.
Oracle ha trattato quello spostamento come un fatto compiuto deciso alle sue spalle. Da lì la discussione si è concentrata su due rivendicazioni esplicite:
- Marchio. Oracle ha dichiarato di possedere il marchio “Hudson”, arrivato con il resto di Sun (“We do however own the trademark to the name”, così Ted Farrell di Oracle su The Register, 1 dicembre 2010). Usare il nome fuori dal perimetro fissato da Oracle ricadeva quindi sotto il suo controllo.
- Governance. Oracle voleva riportare l’infrastruttura sui propri server e tenere l’ultima parola sulle decisioni di progetto. La community chiedeva un modello in cui le scelte tecniche non passassero dal permesso del vendor.
Il nodo è che nessuno dei due punti sta nel codice. Il sorgente lo forki quando vuoi; il nome registrato e la macchina che ospita il sito ufficiale no.
L’architettura della separazione
La proposta dell’11 gennaio 2011 metteva in fila tre interventi distinti, ognuno mirato a una specifica dipendenza da Oracle.
Il primo è il nome. Rinominare in Jenkins toglie alla radice la rivendicazione sul marchio: se Oracle controlla “Hudson”, la community smette e basta di usare quella stringa. Kawaguchi avrebbe registrato “Jenkins” con l’intenzione di trasferire il marchio a una struttura terza — la Software Freedom Conservancy — una volta accolto il progetto. Qui sta il punto: il marchio non resta in mano a una persona o a un’azienda, ma a un ente la cui ragione d’essere è custodire le proprietà dei progetti open source.
Il secondo è l’infrastruttura. Sorgente già su GitHub, liste già su Google Groups e Nabble: nessun pezzo critico del progetto sarebbe più dipeso da macchine che un singolo attore poteva spegnere o riconfigurare.
Il terzo è la governance. Un board provvisorio di tre membri (Andrew Bayer, Kohsuke Kawaguchi e un posto offerto a un rappresentante di Oracle) per i 3-6 mesi seguenti, con l’impegno a fissare un modello stabile e indire le elezioni. La proposta è andata al voto della community dopo che Oracle aveva presentato la sua controproposta; il risultato è stato 214 a 14 a favore del fork.
Il punto critico
La licenza open source garantisce il diritto di forkare il codice. Non garantisce che il fork possa continuare a chiamarsi come l’originale, né che resti raggiungibile all’indirizzo che gli utenti conoscono.
Hudson era MIT, ma “Hudson” come marchio e hudson come progetto su java.net non lo erano. Sono assi di controllo separati dalla licenza, ed è proprio su quelli che la disputa si è giocata. Un vendor che possiede il nome e l’hosting può lasciare libero il sorgente e tenersi comunque una leva pesante: decide chi può chiamare “ufficiale” la propria release e dove finiscono i nuovi utenti quando cercano il progetto.
La community ha risolto rinunciando di proposito all’unica cosa che Oracle possedeva sul serio — il nome — e ricostruendoci attorno tutto il resto su fondamenta che nessun singolo attore controlla. Il prezzo non è da poco: cambiare nome vuol dire bruciare cinque anni di riconoscibilità e riallineare documentazione, plugin, segnalibri e risultati di ricerca.
Implicazioni
Per chi valuta un progetto open source, la licenza del codice è una condizione necessaria ma non sufficiente. Conviene guardare anche tre proprietà che la licenza non copre:
- Marchio — chi lo possiede, e se sta in mano a un ente neutrale o a un singolo attore commerciale.
- Infrastruttura — chi controlla i server che ospitano sorgente, repository di artefatti, sito e liste, e se la community saprebbe ricostruirli altrove in tempi ragionevoli.
- Processo decisionale — chi ha l’ultima parola su release e accettazione dei contributi, e se quel potere è scritto da qualche parte o sta di fatto nelle mani di uno sponsor.
Quando queste tre proprietà si concentrano nello stesso attore che possiede il marchio, la libertà garantita dalla licenza regge solo finché quell’attore non decide di tirare le altre leve. Il modello scelto dalla community — marchio presso un ente terzo, infrastruttura distribuita, board con processo dichiarato — tiene questi assi separati in modo esplicito.
Limiti
A pochi giorni dal primo rilascio è presto per dire come andrà a finire. Jenkins parte con la maggioranza dei committer, l’ecosistema di plugin e l’autore originale; Hudson resta a Oracle, che sostiene di continuarne lo sviluppo e di considerare Jenkins il fork, non il contrario. Quale dei due terrà rilevanza si vedrà nei mesi, e dipenderà da dove migrerà l’attività vera: contributi, plugin, installazioni.
Il board di Jenkins è dichiaratamente provvisorio e il passaggio del marchio alla Conservancy resta un’intenzione, non ancora un fatto. La separazione descritta qui è il disegno; quanto tenga si misurerà sulle decisioni concrete dei prossimi rilasci, non sulle intenzioni di oggi.
https://www.jenkins.io/blog/2011/01/11/hudsons-future/ https://www.jenkins.io/blog/2010/11/30/whos-driving-this-thing/ https://www.jenkins.io/blog/2010/11/23/java-net-migration-status-update/ https://www.theregister.com/2010/12/01/oracle_owns_hudson/ https://www.theregister.com/2011/01/11/hudson_renamed_jenkins/ https://blog.csanchez.org/2011/01/25/hudson-and-jenkins-can-brands-and-trademarks-affect-an-open-source-project/ https://www.noze.it/insights/jenkins-fork-hudson/
Immagine di copertina: Logo di Jenkins: la mascotte di un maggiordomo stilizzato con baffi e papillon, simbolo del server di continuous integration — logo di The Jenkins project, CC BY-SA 3.0 — https://commons.wikimedia.org/wiki/File:Jenkins_logo.svg