Ieri sera tardi, anche se non tardissimo, dopo l’ennesima lotta con Xen e il boot di Nexenta (la variante Solaris che ho deciso di utilizzare per ZFS), sono arrivato ad una conclusione, volendo persino banale, magari opinabile, ma che non mi pare di aver letto finora altrove.

L’episodio scatenante è stato questo: volevo utilizzare un metodo diverso per fare il boot della macchina virtuale su cui gira Nexenta (non per pura voglia di perdere tempo) utilizzando l’utility pygrub e rincuorato dal fatto che ci fosse una soluzione di backup migliore (pv-grub) a sostegno della riuscita dell’esperimento. Alla terza difficoltà, armato di bibbia, ho cercato di usare Pv-Grub ma non riuscivo a trovare “l’eseguibile” che pure è parte del pacchetto Xen standard. Ravanando su Google si scopre che siccome Debian “non compila XYZ in quanto ha dipendenze esterne” allora il pacchetto in questione manca. Ovviamente è possibile generarlo se ci si vuole avventurare nei percorsi compilativi.

Linux non è una piattaforma su cui far girare le applicazioni. Le applicazioni ci sono, non sono poche ma non sono neanche tante abbastanza per farne una piattaforma, ma questo non basta. Linux è una scatola di montaggio per piattaforme più o meno incomplete: a Debian manca questo, ad OpenSuse manca quest’altro, ecc. In Linux non esiste l’equivalente di “eseguibile” in quanto un “eseguibile” si presume abbia dipendenze binarie molto forti. Mentre in una piattaforma il contratto binario è basato su regole molto rigide, in Linux tutto è basato più o meno sui sorgenti. Chi gestisce il repository poi fa un lavoro più o meno buono di impacchettamento di sorgenti in bit ridistribuibili ma la varietà di scelta è tale che il lavoro dell’impacchettatore tende ad essere sempre sotto la sufficienza. Ad esempio nei vari kernel aggiornati di Ubuntu non è attivo il flag “CONFIG_XEN_PCIDEV_BACKEND=m” che non ha nessun effetto collaterale aggiuntivo (tolto qualche piccolo KB di occupazione di memoria) ma che porta a richiedere una ricompilazione ad hoc per chi come me ne ha bisogno.

È ovviamente possibile generare ottime piattaforme usando Linux come è il caso di Android (parlo ovviamente della piattaforma, non di tutto il resto che può avere qualità opinabili). Però nell’accezione generale d’uso la cosa è molto meno che ottimale in quanto un protocollo basato su codice sorgente è molto meno efficace di un protocollo binario: per lo meno è necessario un passo in più e purtroppo la compilazione è un processo meno deterministico di quanto si possa pensare.

-quack