Il mese scorso Canonical ha annunciato una mossa che ha suscitato molti dubbi, ovvero includere ZFS direttamente nel kernel Linux usato da Ubuntu e derivate. Richard Stallman ha ora bocciato completamente l’idea.

Richard Stallman

Richard Stallman, fondatore di GNU

Cosa si propone Canonical

Dato che questa storia non è stata coperta dal nostro sito in precedenza, è bene chiarire quanto è successo e a che problemi Canonical sta andando incontro.

ZFS, file system di punta di Solaris sviluppato da Sun Microsystems nei primi anni 2000 e utilizzato poi da quasi tutti i sistemi basati su BSD, è considerato da anni uno dei migliori file system disponibili (se non il migliore) e il motivo principale di adozione di una piattaforma BSD.

Questo grazie a caratteristiche come la facilità di manutenzione, gli snapshot delle partizioni, la stabilità e consistenza dei dati e il supporto integrato ad array di tipo RAID – senza bisogno di controller hardware dedicati (mentre altri sistemi di RAID software non si avvicinano nemmeno alla sicurezza di un controller hardware).

Linux, fino ad ora, non ha mai integrato questo file system nel kernel (vedremo il perchè tra poco). Fortunatamente, il file system è open source ed esistono vari progetti che permettono l’utilizzo di ZFS anche sul nostro kernel preferito, come OpenZFS (abbiamo parlato dell’ultima versione qui).

Canonical, con un annuncio che ha sorpreso molti, ha fatto sapere a inizio Marzo che intende integrare ZFS direttamente nel kernel Linux che distribuiranno con Ubuntu (e che presumibilmente verrà usato anche dalle varie derivate). Come ho accennato, c’è un motivo per il quale questo non è già stato fatto in passato – ovvero che parrebbe non essere legale.

Il kernel Linux è distribuito sotto la licenza GPL 2 di GNU, mentre ZFS utilizza la CDDL di OpenSolaris. Queste non sono compatibili. Canonical non può distribuire una versione del kernel Linux che integri software con una licenza incompatibile, dato che si possono creare situazioni dove seguire i parametri di una licenza andrebbe contro quelli dell’altra.

L’intervento di Richard Stallman

É proprio su questo argomento che è intervenuto Richard Stallman (fondatore di GNU e da anni forte sostenitore del software libero) l’undici Aprile, con un lungo articolo dove spiega con tutti i dettagli del caso perchè quanto si propone Canonical (o chiunque abbia intenzione di integrare ZFS nel kernel Linux e distribuire il risultato) va contro la licenza GPL 2 ed è di conseguenza illegale. La dichiarazione completa vale la pena di essere letta (la trovate come fonte di questo articolo), ma per chi non ne avesse il tempo i punti principali possono essere riassunti come segue:

  1. La licenza GPL richiede che il software, se modificato tramite l’aggiunta di nuovi moduli come in questo caso, sia rilasciato sotto la stessa licenza per garantire che gli utenti della nuova versione possano usufruire delle stesse libertà di chi l’ha realizzata e permettere che nuove modifiche vengano anch’esse rilasciate secondo questi principi.
  2. In privato, si può usare e modificare il software a piacimento – le restrizioni della GPL si applicano solo quando le modifiche vengono rese disponibili ad altri (come farebbe Canonical).
  3. I punti di cui sopra si applicano sia al codice sorgente che a eventuali file binari precompilati.
  4. Chiunque distribuisca software coperto dalla GPL senza rispettare le condizioni della licenza perde immediatamente il diritto alla distribuzione e nel caso della GPL versione 2 usata per il kernel Linux la perdita è permanente, a meno che i detentori del copyright non decidano altrimenti.
  5. I detentori del copyright possono comunque elargire permessi speciali a loro piacimento.

Come vedete, se Canonical decidesse di andare avanti con la propria idea nelle condizioni attuali potrebbe perdere permanentemente il diritto a distribuire il kernel – cosa che sarebbe quasi sicuramente fatale al progetto Ubuntu e con ogni probabilità a Canonical stessa.

Tuttavia, Stallman lascia uno spiraglio aperto – se Oracle decidesse di permettere la distribuzione di ZFS sotto la licenza GPL esclusivamente a Canonical o esclusivamente in aggiunta al kernel Linux si potrebbe evitare qualunque problema legale – questa è la soluzione che Stallman stesso (insieme alla fondazione GNU) si auspica.

Alternativamente i detentori del copyright di Linux potrebbero permettere la distribuzione del kernel sotto una licenza compatibile con quella di ZFS, ma questo sarebbe molto più complicato e altamente improbabile (Linus Torvalds stesso ha spiegato tempo fa che ritiene la GPL 2 perfetta per Linux e di conseguenza si rifiuta di cambiarla anche solo secondo le spefiche della GPL 3).

Non resta che sperare in un atto di buona fede da parte di Oracle e che Canonical non si spari su un piede – qualunque cosa si pensi di Ubuntu, è innegabile il suo contributo alla comunità GNU/Linux.

[Fonte]

  • che tenero stallman in quella foto… mi sembra l’orso abbraccia tutti di colorado 🙂

  • Aury88

    “se Canonical decidesse di andare avanti con la propria idea nelle condizioni attuali potrebbe perdere permanentemente il diritto a distribuire il kernel – cosa che sarebbe quasi sicuramente fatale al progetto Ubuntu e con ogni probabilità a Canonical stessa” “Non resta che sperare in un atto di buona fede da parte di Oracle e che Canonical non si spari su un piedi”
    un po’ catastrofista queste frasi…se non sarà possibile distribuire il kernel con link ad un modulo a parte semplicemente si farà un revert e tempo un paio di giorni canonical ti ridistribuisce linux con il supporto ai filesystem di sempre…oppure troverà un modo per distribuire la distro in modo tale da chiedere all’avvio come si vuole il filesystem e, se scelto, scaricare ed installare il supporto a FZS senza dover distribuire ubuntu con il modulo incriminato già integrato….permanentemente non vedo come gli possa venire impedito di distribuire linux se si rimette a produrre so che rispetta la GPL…

    • Giorgio Ghisotti

      La GPL versione 2 non prevede la revoca dell’interdizione anche se smettono di distribuire la versione incriminata, la 3 si. Linux usa la versione 2, quindi per poter tornare a distribuire il kernel dovrebbe ottenere un “perdono” da parte dei detentori del copyright – tantissimi nel caso del kernel, quindi la cosa sarebbe quantomeno complicata. Trovarsi anche solo per un paio di mesi nell’interdizione sarebbe comunque un grosso colpo. Con ogni probabilità Canonical tornerà sui suoi passi e proporrà l’installazione all’avvio come dici, ma al momento è tutto da vedere.

    • El Ninho

      Un filesystem per funzionare deve essere incluso nel kernel, non può essere aggiunto come modulo. se il kernel e su un /boot zfs come fa ad avviarsi? e l inclusione nel kernel che fa fare a cazzotti le licenze

      • Qfwfq

        Domanda da assoluto ignorante: non è possibile fare il contrario ovvero prima installare il FS e poi installare il kernel?

        • Samael

          Tecnicamente il problema di Canonical non è che ZFS non può essere distribuito.

          Il problema di Canonical è che non possono combinare Linux e ZFS.
          In sostanza, il modulo del kernel di ZFS deve rimanere in un pacchetto separato, come lo si fa per i driver nvidia.
          Canonical invece ha messo ZFS nel trunk, e non solo a livello di pacchetto (i driver di zfs ed spl si trovano nel pacchetto linux-image), ma anche a livello di sorgente.
          E tale integrazione è da sempre considerata illegale in caso di redistribuzione.
          In sostanza, tu puoi integrare ZFS in Linux solo nel tuo kernel che ti compili a casa. Ma non puoi metterlo su un repository e darlo a tutti.

          Tuttavia, se tu fornisci il pacchetto linux-image che contiene solo il kernel ed il pacchetto zfs-kmod che contiene il driver di zfs, allora sei perfettamente in regola.

          • Qfwfq

            Grazie, ora mi è più chiaro. Ma ci sono esigenze tecniche per cui è preferibile inserirlo nel codice invece che distribuirlo come pacchetto aggiuntivo?

          • Samael

            Che io sappia no, ed è per questo che come ho scritto sopra io ed altri siamo rimasti sorpresi di questa scelta.
            Senza contare che Canonical è stata piuttosto vaga sulla loro indagine compiuta con i loro avvocati per valutare la legalità di ZFS incluso nel kernel Linux. Non hanno reso pubblica alcuna relazione, sebbene gli sia stato chiesto da più parti in modo da chiarire la questione.

            Cioè, a quanto ha detto Dustin Kirkland ZFS serve solo per i container creati con LXD.
            Non è un file system che Canonical ha programmato di mettere come scelta nell’installer, sebbene sia presente il supporto nell’initramfs tramite un pacchetto opzionale. Quindi è probabile che la scelta come FS di root sarebbe stata possibile nelle versioni successive.

            Le stesse utility di ZFS (zpool, zdb e zfs) sono messe in un pacchetto (zfsutils-linux) che si trova nel repository universe, e che se non ricordo male è pure disabilitato di default. Ubuntisti, correggetemi se ho sbagliato.

            Anzi, ti dirò di più: data la natura dello sviluppo del port di ZFS su Linux, che è appunto una cosa a sé stante dal kernel, è meglio tenerli separati anche a livello di pacchetto, in modo da aggiornarlo più facilmente.

          • El Ninho

            Scusa ma se viene usato in un modulo separato, come fa ad avviarsi se per caricare il modulo deve leggere il file system?

          • Samael

            La partizione formattata viene identificata dal boot loader, quindi il driver del kernel non c’entra.
            GNU GRUB supporta entrambe le implementazioni, OpenZFS (usata da Ubuntu) ed Oracle.
            Da lì il boot loader accede alla partizione e carica il kernel e l’initramfs.

            L’initramfs come dice la parola stessa è un RAMFS che ha il compito di fornire un sistema operativo base caricato in memoria, contenente i moduli del kernel relativi al file system e al chipset, ed ha il compito di inizializzare l’OS vero e proprio, decriptando il volume root (se necessario), rilevando configurazioni RAID ecc., e montandolo in una directory.
            Il sistema esegue poi un chroot all’interno della directory e carica il gestore dei servizi (init, systemd ecc.) che mette su i demoni e carica la shell.

            Oggi non si ha più bisogno di mettere il driver del file system nell’immagine del kernel, perché l’initramfs fa già tutto questo.
            Difatti l’uso dei kernel cosiddetti statici è quasi del tutto scomparso. Che io sappia, di distro binarie solo Slackware ne fornisce uno pronto all’uso.

          • El Ninho

            Grazie per la risposta c’è sempre da imparare, io parlavo del kernel senza initramfs ma effettivamente quasi tutte le distro lo usano.

          • Alicia Frantinelli

            Attualmente viene diffuso con DKMS. Ossia in Ubuntu 16.04 è presente un pacchetto (molti in realtà) con i sorgenti di ZFS. Quando fai apt-get install, devi accettare di installare le binutils, gcc e vari tool di compilazione perché una volta scaricato il pacchetto ZFS esso viene compilato e poi caricato come modulo del kernel. Ogni volta che il kernel si aggiorna o il pacchetto, il pacchetto viene ricompilato e ricaricato.
            La problematica sta nel fatto se sia lecito o meno usare il modulo ZFS così ottenuto assieme al kernel linux che è GPL.

          • Samael

            Attualmente viene diffuso con DKMS.

            In realtà zfs-dkms è più un residuo dell’implementazione Debian.
            Su Ubuntu l’implementazione ufficiale si trova nel pacchetto linux-image.

            Guarda qui: h t t p : / / packages . ubuntu . com / xenial / amd64 / linux-image-4.4.0-18-generic / filelist

            […]
            /lib/modules/4.4.0-18-generic/kernel/zfs/avl/zavl.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/nvpair/znvpair.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/spl/spl.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/splat/splat.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/unicode/zunicode.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/zcommon/zcommon.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/zfs/zfs.ko
            /lib/modules/4.4.0-18-generic/kernel/zfs/zpios/zpios.ko
            […]

            La problematica sta nel fatto se sia lecito o meno usare il modulo ZFS così ottenuto assieme al kernel linux che è GPL.

            No, Alicia, è il contrario.
            L’implementazione basata su DKMS è perfettamente in regola, tant’è che Debian non è incriminata, in quanto ZFS è sia tenuto fuori dal kernel che addirittura compilato sulla macchina target, quindi le implicazioni legali non sussisterebbero a prescindere. La SFC lo disse chiaramente nel loro rapporto.
            Quello è che non è lecito è fare come ha fatto Canonical: mettere ZFS nello stesso sorgente del kernel e distribuire entrambi nello stesso pacchetto.
            Questo perché la licenza del pacchetto linux-image dovrebbe essere quella di Linux. Ma la GNU GPL vieta la combinazione con licenze incompatibili come la CDDL, quindi c’è una violazione della clausola relativa alla redistribuzione.

          • Aury88

            perchè in canonical hanno deciso per l’integrazione nel kernel e non per l’utilizzo del pacchetto zfs-kmod?

      • Aury88

        questo non toglie il fatto che canonical può sempre fare un revert e tirare fuori una versione classica con i fs classici….chi parla di rischio chiusura attività per canonical per una cosa del genere direi che sta esagerando…non potrà rilasciare quello specifico software…può sempre continuare a rilasciare quello vecchio (su cui al momento si asano tutti i suoi incassi)

        • Samael

          Canonical non abbandonerà ZFS. Ci ha investito un sacco ed è una tecnologia troppo importante per i guadagni futuri, Aury88.

          ZFS vale più dei suoi attuali incassi, credimi, perché sta diventando sempre più un requisito obbligatorio nei deploy cloud, dove i rollback sicuri e lo storage pooling sono una manna dal cielo.
          Addirittura stanno nascendo OS, come OSv, che pur non essendo UNIX hanno adottato ZFS come FS nativo.
          Intel, che quasi sia è uno dei big dietro BTRFS, lo usa in maniera massiccia nei suoi datacenter.
          Canonical ne ha bisogno per i container. E loro sanno benissimo che BTRFS non è più una soluzione viabile. Anzi, non lo è mai stato.

          IMHO faranno split e lo pacchettizzeranno nella maniera corretta. Ma di sicuro ZFS non scomparirà.

          • Aury88

            cioè per split intendi come è adesso la situazione? cioè kernel linux + pacchetto zfsutils-linux?

          • Samael

            No, intendo: kernel linux + pacchetto del modulo di zfs.
            Adesso, i driver di zfs e di spl fanno parte del pacchetto linux-image, ed è questo il problema, oltre ad averli integrati completamente anche a livello di sorgente.

            zfsutils-linux è un pacchetto relativo alle utility, quindi non rientra nel problema.

      • Gambit

        Guarda che tutte le distribuzioni hanno zfs come modulo del kernel, anche in FreeBSD zfs funziona come modulo, è incluso nativamente nel kernel solo in illumos (erede di OpenSolaris). Io su Gentoo lo usavo come modulo senza integrarlo nei sorgenti del kernel

  • Samael

    Tuttavia, Stallman lascia uno spiraglio aperto – se Oracle decidesse di permettere la distribuzione di ZFS sotto la licenza GPL esclusivamente a Canonical o esclusivamente in aggiunta al kernel Linux si potrebbe evitare qualunque problema legale

    AHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHHAH
    Sicuro proprio.
    Già me lo vedo Larry Ellison a cambiare la licenza di ZFS, considerando che quel file system è proprio uno dei motivi per il quale OpenSolaris è stato chiuso subito dopo l’acquisizione della SUN.

    Tra l’altro non cambierebbe nulla, perché lo ZFS incluso in Ubuntu è una versione diversa da quello che c’è in Solaris, ed il che vuol dire che Oracle non avrebbe alcun potere di cambiarne la licenza, dato che la CDDL richiede l’assenso di TUTTI i detentori del copyright.
    E quelli di illumos (che sono coloro che ne hanno la maggioranza) non hanno alcuna intenzione di fare una porcheria simile, dato che se il software avesse la doppia licenza di cui una esclusiva per Linux poi le modifiche e le migliorie fatte nel nostro kernel non avrebbero un ritorno nelle altre implementazioni.
    Ma tanto questo a Stallman non interessa, così come non interessava quando Linux prendeva codice BSD e lo integrava nel codice GPL rendendo impossibile il ritorno per ovvi motivi.
    Di cos’è che si accusava Microsoft? Ah sì, di EEE.

    Stallman stavolta è stato davvero divertente.
    Mi è piaciuta davvero ‘sta fesseria del chiedere ad Oracle di cambiare la licenza, quasi come se il problema fosse di ZFS quando non è così, visto che il problema è lato GPL.

    Per concludere, Canonical stavolta se l’è cercata perché l’ha integrato nello stesso trunk del kernel. Era scontatissimo che sarebbe finita così. Lo sapevano tutti che la distribuzione combinata è illegale, e solo una separata è possibile. Difatti su Google+, sulla pagina di Simon Phipps (ex-Sun), io ed altri ci siamo proprio domandati il perché di questa scelta idiota.
    Canonical avrebbe dovuto rilasciarlo come package separato. Solo così nessuno avrebbe potuto dire nulla, dato che altre distro lo pacchettizzano in questa maniera, oltre il fatto che persino i driver nvidia sono distribuiti così.

    • Giorgio Ghisotti

      Hai ragione, è improbabile che ci sarà alcun movimento in quella direzione. Stallman, però, non ha potere su cosa copre o non copre la licenza di Linux – lo standard GPL 2 è ormai stabilito e Stallman non può obbligare gli sviluppatori a passare alla 3 o a qualunque altra licenza contro la loro volontà.

    • Luky

      non riesco a trovare un tuo commento dove non ti si possa dare ragione, a differenza di altre persone

      • El Ninho

        Quando uno sa di cosa parla è difficile contraddirlo 😉

    • Maudit

      La licenza CDDL, derivata dalla M(ozilla)PL, ma successiva alla S(un)PL, è una licenza che cronologicamente si posiziona dopo la GPL.
      La sua ragion d’essere come open source fu la necessità ed il tentativo da parte di SUN, che produceva Solaris, di contrastare l’ascesa di Linux nel settore dei server.
      Nel rilasciare Solaris come open source, tuttavia, i redattori della licenza con cui veniva fornito, si dovettero assicurare che il codice alla base delle soluzioni presenti in Solaris NON POTESSE essere implementato su Linux.
      Volevano sì rilasciare il progetto come open, ma al contempo intendevano impedire che il loro principale concorrente, la cui licenza aperta era causa di successo e motivo che li portò alla medesima conclusione, potesse implementare le loro tecnologie
      .
      Quindi ZFS è indisponibile sul kernel linux per volontà di chi ne ha creato la licenza: non perché volevano assicurarsi “il ritorno”, ma con lo specifico intento di impedire del tutto che un concorrente diretto si avvantaggiasse delle proprie soluzioni migliori.

      Il codice BSD non ha “ritorno” per la demenza stessa della licenza con cui è fornito: così come può essere usato e modificato per una playstation o per un macintosh (closed source), può essere adoperato in un sistema gnu/linux.
      EEE, che riguarda gli standard e la loro distorsione tramite monopolio commerciale, in ogni caso, non c’entra un bel nulla.

      • Samael

        Grazie per la lezione di storia su Solaris, anche se erano tutte cose che conoscevo già, dato che ai tempi OpenSolaris era il mio sistema operativo.

        Quindi ZFS è indisponibile sul kernel linux per volontà di chi ne ha
        creato la licenza: non perché volevano assicurarsi “il ritorno”, ma con
        lo specifico intento di impedire del tutto che un concorrente diretto si
        avvantaggiasse delle proprie soluzioni migliori.

        Questo è una cosa che non ha nulla a che vedere con la situazione di OGGI.
        Oggi OpenZFS non è più in mano ad Oracle, sebbene il vecchio codice risalente alla v28 della pool e alla v5 ha il suo copyright.
        Oggi il codice ha diversi contributor, della maggiorparte illumos, ma anche FreeBSD e Linux/LLNL.
        E sì: OGGI c’è il problema del ritorno del codice, perché una doppia licenza porterebbe a feature flags GPL che non potrebbero essere re-integrabili.

        Il codice BSD non ha “ritorno” per la demenza stessa della licenza con cui è fornito

        LOL
        Bel ragionamento da due soldi: in sostanza se una ragazza ha la minigonna e la stuprano è colpa sua che se la va a cercare?
        Lascia che ti dica una cosa: ha fatto più tornare Apple a BSD che Linux.
        La questione del ritorno, nel caso in cui non lo sapessi, è una questione che riguarda il mix di codice sotto differente licenza.

        Sai perché la CDDL e la GNU GPL non sono compatibili? Te lo spiego io: il problema è che la GPL permette il mix di codice a patto che il software non GPL sia compatibile.
        Per compatibile sai cosa si intende? Che rispetti le quattro libertà? Sì, ma non solo.
        La CDDL infatti rispetta TUTTE le libertà della GNU GPL.
        Per poter effettuare il mix occorre che la licenza non GPL permetta la redistribuzione sotto differente licenza.

  • Secondo me è una provocazione per capire come muoversi…

  • Gambit

    Io non capisco perché nel kernel ci possono essere binary blog e poi si fanno storie per zfs seppure questo abbia a quanto pare una licenza libera ma non compatibile con la gpl

No more articles