Archivi categoria: Open Source

Inerente a software a codice aperto (open source)

Come migliorare il software libero in Europa

Dal 6 gennaio al 3 febbraio 2026 la Commissione Europea raccoglie commenti, suggerimenti, opinioni, ricerche su come ridurre la dipendenza dell’unione europea sul fronte digitale tramite il software libero. Più in particolare:

  • facilitare l’adozione del software libero da privati cittadini, aziende private e pubbliche e incoraggiare le società a contribuire allo sviluppo del software libero;
  • dare una spinta allo sviluppo della competitività nei settori open source emergenti nell’unione europea;
  • rafforzare la posizione delle start-up nell’ecosistema dell’innovazione (che non ho ben capito cosa voglia dire).

Il testo originale, chiamato call for evidence, è qui.

Sto cercando di raccogliere le idee su quest’argomento e avrei in effetti qualche suggerimento, che nei prossimi giorni proporrò alla Commissione. Cerco di trascriverle qui anche per raccogliere pareri.

La prima cosa che mi viene da dire è che mi piacerebbe che il software libero fosse sviluppato parallelamente ad una generalizzata disaffezione rispetto ai grandi colossi di Internet. Intendo dire che vorrei che in Europa (ma anche altrove) non ci fosse l’accentramento di troppo potere legato alla sfera del digitale, come ad esempio succede con le grosse società della sigla GAFAM. Non so dire se software libero e, ad esempio, decentralizzazione, siano legati, sicché qui dico solo che vorrei che andassero a braccetto. Poi magari scopriremo che la cosa è automatica, chissà.

Quindi per aumentare lo sviluppo del software libero non vorrei che ci fossero strumenti come github gestiti però da una azienda europea. Vorrei invece che ci fossero strumenti analoghi, realizzati esclusivamente con software libero, e forniti da tante diverse aziende private e/o pubbliche. Mentre ovviamente l’azienda privata che vuole raccogliere su di sè il massimo numero di clienti cerca di isolarli dalla concorrenza col meccanismo del lock-in, nel nostro caso immagino un ecosistema nel quale tutti si possano scambiare dati. Credo che qualcosa di simile stia nascendo ora con forgejo.it che offre il servizio basandosi sul software forgeio. Ci sono comunque già parecchie realtà dove si realizzano servizi, per utenti e per sviluppatori, interamente basati su software libero, come ad esempio framasoft in Francia.

Alla base della federazione tra i vari software/servizi ci potrebbe essere il protocolloActivityPub, ormai abbastanza rodato e già ampliamente utilizzato da molti, ad esempio PeerTube (pubblicazione di video), Mastodon (microblogging), Forgejo (repository GIT), WordPress (blog), NextCloud (condivisione file ad altro), Friendica (social network), PixelFed (social basato su immagini), Mobilizon (gestione eventi) e appuntamenti), Ghost (siti web), BookWyrm (social di lettori) e flohmarkt (vendite e acquisti online). Ci sono dei limiti a questo protocollo, ad esempio attualmente non può sempre essere verificata l’età di un utente, quindi non è facile limitare l’accesso ai social ai minori di 14 anni (l’età può essere verificata, ma non è un controllo obbligatorio). Ciononostante è un buon protocollo e vorrei che fosse adottato e migliorato per le esigenze che possono emergere.

ActivityPub non è uno strumento per l’autenticazione, difatti internamente utilizza OAuth 2.0 per autenticare gli utenti, e un meccanismo diverso per autenticare le applicazioni; invece è un protocollo per inviare a, modificare in e cancellare contenuti da un server, nonché notifiche e contenuti da un sistema ad un altro. ActivityPub è attualmente sviluppato dal W3C, una organizzazione senza scopo di lucro basata nel Massachussets.

Una cosa molto importante è che non penso sia necessario sviluppare software da zero in Europa. Credo che sia invece molto importante condividere questi sviluppi con tutto il mondo. Se ad esempio ci fosse un progetto open source sviluppato in Giappone e gestito tramite gitLab, io vorrei che si partecipasse a quel progetto facendo in modo che tutti se ne avvantaggiassero. Magari gli europei contribuirebbero a funzionalità usate solo in questo continente, ma finché non ci fossero divergenze sullo sviluppo del progetto, manterrei lo sviluppo comune, magari con un mirror europeo del repository.

Ci sono alcune cose che mi piacerebbe vedere implementate in Europa, con software libero. Una di queste è alla base della rete Internet, cioè l’emissione e gestione di certificati SSL, come fa ad esempio Let’s Encrypt, che è di una organizzazione senza scopo di lucro basata in California e chiamata Internet Security Research Group.

Al di là dello scenario generico con varie piattaforme federate che offrono servizi diversi, credo sarebbe importante fare crescere qui in Europa alcuni servizi, che per me dovrebbero essere basati su software libero.

Visto che alla base di tutte o quasi tutte le applicazioni c’è uno strato di persistenza, credo che l’agevolazione dell’adozione del software libero sarebbe più semplice se ci fossero incentivi economici per le aziende che si equipaggiassero, in casa, con personale specifico per la gestione di database. Ad esempio, una società che acquista un sistema ERP o anche un piccolo gestionale, spesso può scegliere il database da usare. Come viene fatta la scelta? Ovviamente l’azienda vuole limitare i costi e quindi sceglie il database al costo minore delle licenze e del contratto di manutenzione. Sappiamo che il software libero non ha costi di licenza, ma ha la manutenzione. Questa però è offerta ancora da poche aziende e capita che abbia costi maggiori rispetto alla controparte con software proprietario. Una soluzione sarebbe quella di assumere come dipendente, oppure come consulente esterno, una persona o più persone ad un costo contenuto grazie all’incentivo. Oppure di formare personale nuovo o già esistente grazie a corsi di formazione a costo agevolato. Questo sarebbe aggiunto al piatto della bilancia, in favore della scelta del software libero. Con, indirettamente, l’aumento dell’occupazione e l’aumento della diffusione della conoscenza sui database liberi come ad esempio PostgreSQL, MariaDB.

Un altro fronte sul quale la Commissione potrebbe agire è quella degli incontri tra sviluppatori e tra utilizzatori. Questi incontri rafforzano le comunità, mettono in contatto persone, mostrano le novità. In alcuni casi sono organizzati direttamente da aziende, in altri invece c’è qualche volontario che lo fa, anche cercando sponsor aziendali. Non si tratta mai di eventi che richiedono budget enormi, e spesso i volontari si occupano di tutto, sicché quello servirebbe è un metodo per pubblicizzarli, il pagamento delle aule e magari anche di un servizio di trasmissione in rete, il rimborso delle spese per i relatori. Purtroppo su questo fronte siamo parecchio indietro, soprattutto in Italia: eventi come il pgDay mancano a tutti quelli che vi hanno partecipato. Altri, come il LinuxDay, potrebbero essere organizzati meglio.

Un ulteriore punto di vista è quello di spingere l’adozione del software libero partendo dall’alto: la Commissione potrebbe finanziare le nazioni, o le regioni o anche le singole municipalità in modo che le amministrazioni pubbliche adottino veramente il software libero. Questa non è una cosa semplice: in passato è successo, con grandi città europee, che sia stato tentato l’abbandono dei prodotti di Microsoft Office, ma questo tentativo ha trovato molti detrattori sia tra chi era in una posizione dirigenziale sia tra i vari utenti, che sono normalmente contrari a qualsiasi cambiamento, ma dopo qualche anno (uno, forse due), la Microsoft ha proposto qualche accordo, tipo di dare le licenze gratis per due anni, e si è ripresa il comune. Il comune ha vantato il risparmio, anche se temporaneo, la Microsoft ci ha inizialmente rimesso un po’, e tutto è tornato come prima. Per evitare di cadere in questi pasticci la Commissione potrebbe far nascere dei centri di competenza con personale qualificato che conosce il software libero e il dominio dell’amministrazione pubblica, e questi centri dovrebbero agevolare l’adozione del software libero nelle amministrazioni pubbliche. (esempi di strade abbandonate: la (prima?) decisione del comune di Torino di adottare il software libero nel 2017; la nota del CSI Piemonte del 2019 che decantava il software e lo dava per assodato e disponibile; una seconda decisione di adottare il software libero a Torino a novembre 2022).

(Questa pagina non è ancora completa: sto raccogliendo ancora idee, ma accetto già commenti da tutti.)

Linuxday 2024 e la voglia di piccole realtà

Qualche giorno fa ho assistito al Linuxday di Torino e sono stato colpito dalla presentazione tenuta da Boris Budini e Redon Skikuli e intitolata «Rise against Big Tech with open source» (la cui presentazione è disponibile qui).
Hanno esposto quello che penso sia il frutto della loro esperienza a proposito di LibreLabs e di Cloud68.co. E questa esperienza è molto interessante: come riuscire a mettere su una infrastruttura gestita completamente da software libero, per l’hosting di applicazioni e servizi anch’essi liberi, senza mai ricorrere a nessuna delle grandi società come quelle conosciute con la sigla GAFAM.

Beh, ovviamente non potevano scendere in dettagli, anzi, non potevano neppure fare un riassunto a grandi linee, perché in un’ora si fa appena in tempo a scalfire la superficie di un argomento così vasto.

Ma la cosa importante è stata l’esortazione a fare qualcosa di simile un po’ ovunque. Loro hanno la base in Albania, ma ci sono servizi simili anche altrove. Ad esempio hanno citato chatons, in Francia.

Allora la domanda sorge spontanea: cosa c’è di simile in Italia?

Systemd e PostgreSQL: avvio alla bisogna

systemd ha tante caratteristiche interessanti, una delle quali è l’attivazione tramite socket, vale a dire che si può configurare systemd si mette in attesa su una certa porta TCP (o una pipe, o altro tipo di socket) al posto di un altro programma. Quando arriva una richiesta di connessione, systemd l’accetta e attiva il servizio configurato, poi questo deve comunicare con systemd, prendere la richiesta in arrivo e servirla.

Perché è interessante? Perché si possono configurare molti servizi su una sola macchina, ma attivarli solo quando veramente sono richiesti. Oppure, durante l’avvio del computer, si possono attivare vari servizi in contemporanea, con l’attivazione tramite socket, e proseguire come se già fossero attivi.

Continua a leggere

Samba, SSSD e SELinux su Red Hat

Di recente ho dovuto installare un server Red Hat Enterprise Linux 7, si tratta di una macchina che ospita un database Oracle, ma mi è stato chiesto di attivare anche alcune condivisioni tramite samba. Ho fatto tutti i passaggi consueti per l’installazione e configurazione, ma non funzionava nulla. Dopo due giorni di lavoro ho sistemato la macchina, superando vari ostacoli. Elenco qui i problemi più grossi e le relative soluzioni.

Autenticazione

La macchina è stata messa in dominio Windows per poter accettare connessioni dai computer aziendali. Per farlo è stato installato il server SSSD che permette l’integrazione con il dominio Windows e la mappatura di utenze e gruppi di dominio. Samba è stato configurato copiando il tutto da un’altra macchina, SunOS, che ospitava precedentemente le cartelle di rete. Quel samba usava Winbind per l’integrazione con il dominio, sicché anche qui è stato usato winbind.
Nelle utenze sul dominio Windows non sono presenti userid e groupid come su Linux, sicché tutti i programmi di interfaccia con il dominio fanno una mappatura che parte dal SID dell’utenza Windows e arrivare a userid e groupid di Linux. Ovviamente per un determinato utente la mappatatura deve essere sempre eguale, sicché questa associazione viene memorizzata in un file. Il file è diverso se si usa SSSD o se si usa Winbind. Ma la cosa che non sapevo è che anche l’algoritmo di mappatura è diverso, quindi quando samba riceve una richiesta di connessione, effettua l’autenticazione con Kerberos e poi mappa il SID dell’utenza Windows su una utenza locale, che però qui non veniva trovata. L’errore era:

[2022/12/22 10:37:04.668145, 1] ../../source3/auth/token_util.c:561(add_local_groups)
SID S-1-5-21-990198401-320236572-313593124-1040 -> getpwuid(11040) failed

in effetti l’utenza in questione aveva un uid diverso: 1092201040 anziché 11040

[linux]# id 'azienda\nome.utente'
uid=1092201040(nome.utente@azienda.dom) gid=1092200513(domain users@azienda.dom) gruppi=1092200513(domain users@azienda.dom)

mentre sul vecchio server era proprio 11040:

[SunOS] # id 'azienda\nome.utente'
uid=11040(AZIENDA\nome.utente) gid=10513(AZIENDA\domain users)

Per sistemare questa cosa ci sono due diverse possibilità. La più diffusa, ma secondo me peggiore, è di fare usare winbind anche a NSS, cambiando le tre righe nel file /etc/nssswitch.conf da

passwd: files sss
group: files sss
shadow: files sss

a

passwd: files winbind
group: files winbind
shadow: files winbind

la seconda è di cambiare l’algoritmo usato da SSSD per generare userid e groupid. Questo si fa nel file /etc/sssd/sssd.conf, dove, per il dominio in questione, ci sarà scritto che il backend è proprio il dominio tramite la configurazione id_provider=ad. Questo vuol dire che si possono usare anche le configurazioni di sssd-ad come quella che ci interessa: ldap_idmap_autorid_compat. Il valore predefinito è false, ma se viene aggiunta al file di configurazione e impostata a true, risolve il problema.

Una volta fatto questo, l’autenticazione dovrebbe cominciare a funzionare.

Accesso al file system

Quando si accede tramite samba, l’utenza sulla quale si viene mappati deve avere l’accesso alle directory e ai file da utilizzare. Se, ad esempio, la condivisione utilizza la directory /s6/work1/samba, allora sarà necessario che l’utente possa arrivarci. Per farlo è necessario che la directory e quelle padre, cioè /s6, /s6/work1 e /s6/work1/samba abbiano tutte i bit “r” e “x” accesi, cioè che siano leggibili (“r”) e che ci si possa spostare in quella directory (“x”).

Una volta fatto questo, si ottiene ancora l’errore:

[2022/12/22 12:23:30.517028, 0] ../../source3/smbd/service.c:784(make_connection_snum)
make_connection_snum: canonicalize_connect_path failed for service CARTELLA, path /s6/work1/samba

Questo perché è attivo SELinux. Quando samba lavora su un sistema con SELinux è necessario fare alcune operazioni in più:

indicare che la directory in questione deve essere accessibile a samba per una condivisione. Questo si fa con la policy samba_share_t. Il comando da usare per fare una prova è;

[linux]# chcon --recursive --type samba_share_t /s6/work1/samba

mentre quelli per rendere il tutto permanente sono;

[linux]# semanage fcontext --add --type samba_share_t "/s6/work1/samba(/.*)?"
[linux]# restorecon -R -v /s6/work1/samba/

Per verificare che il tutto abbia funzionato, date il comando:

[linux]# ls -ldZ /s6/work1/samba/ /s6/work1/ /s6/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /s6/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /s6/work1/
drwxrwxrwx+ root root unconfined_u:object_r:samba_share_t:s0 /s6/work1/samba/

A questo punto samba potrà accedere a quella directory e ai file ivi contenuti senza che SELinux la blocchi. Ma, se cercate di collegarvi ottenete ancora lo stesso errore:

[2022/12/22 14:05:14.602571, 0] ../../source3/smbd/service.c:784(make_connection_snum)
make_connection_snum: canonicalize_connect_path failed for service CARTELLA, path /s6/work1/samba

Ora però il problema è un altro, sempre legato a SELinux: ci sono delle attività che sono completamente inibite in samba a meno di attivare tramite la configurazione di SELinux. Perché sia possibile condividere una qualsiasi directory in lettura va usato il parametro samba_export_all_ro, perché sia possibile farlo anche in scrittura va usato il parametro samba_export_all_rw. I due si attivano in questo modo:

[linux]# setsebool -P samba_export_all_ro=1 samba_export_all_rw=1
[linux]# getsebool -a| grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> on
samba_export_all_rw --> on
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
[linux]# systemctl restart smb nmb winbind

A questo punto tutto dovrebbe funzionare.