Codice Verde: Il Futuro Sostenibile del Software

feb 22, 2024 | Green IT Codice Verde: Il Futuro Sostenibile del Software

Hai mai pensato al fatto che mentre stai utilizzando il tuo software preferito, potresti anche contribuire all'incremento delle emissioni di carbonio?

Se questa domanda ti ha fatto sollevare un sopracciglio, non sei solo. Molti di noi raramente pensano al fatto che l'atto apparentemente innocuo di utilizzare il nostro software preferito potrebbe effettivamente alimentare l'incremento delle emissioni di carbonio.

Come programmatori, siamo abituati a concentrarci sulla funzionalità, sulla performance e sulla sicurezza del nostro codice. Tuttavia, c'è un altro aspetto critico che spesso trascuriamo: la sostenibilità ambientale. Il software che scriviamo e distribuiamo ha un impatto tangibile sull'ambiente, sia attraverso il consumo di risorse hardware che attraverso l'energia necessaria per eseguirlo.

Ma cosa possiamo fare come programmatori per affrontare questa sfida? Come possiamo scrivere codice che non solo funzioni bene, ma che sia anche sostenibile dal punto di vista ambientale? È qui che entra in gioco il concetto di 'sostenibilità del software'.

La sostenibilità del software si riferisce alla pratica di progettare, sviluppare e distribuire software in modo che abbia il minor impatto possibile sull'ambiente come, ad esmpio, ottimizzare l'efficienza del codice per ridurre il consumo di energia, utilizzare risorse hardware in modo più efficiente e adottare pratiche di sviluppo che tengano conto dell'impatto ambientale.

Ma non si tratta solo di scrivere codice più efficiente. La sostenibilità del software tiene in considerazione l’intero ciclo di vita del software, dalla progettazione alla distribuzione e alla fine del suo utilizzo. Ciò significa valutare le decisioni di progettazione in base al loro impatto ambientale, scegliere piattaforme di distribuzione che utilizzino energie rinnovabili e adottare pratiche di gestione dei rifiuti e del riciclo dei dispositivi informatici.

Inoltre, come programmatori, abbiamo anche il potere di influenzare le decisioni delle organizzazioni per cui lavoriamo e delle comunità di sviluppo di cui facciamo parte. Possiamo promuovere l'adozione di pratiche sostenibili all'interno delle nostre organizzazioni e incoraggiare i nostri colleghi a fare lo stesso.

Ma prima di tutto, dobbiamo essere consapevoli del problema e impegnarci a fare la nostra parte per affrontarlo. È tempo che i programmatori software diventino parte della soluzione alla crisi climatica, invece che parte del problema. [1]

In questo articolo, analizzeremo il problema dal punto di vista della ottimizzazione del codice e la domanda a cui vogliamo rispondere è: “E’ possibile scrivere codice Green ?”

Spoiler: Si Può Fare ! (cit.) Ma come ?

Il potere del linguaggio

Partiamo dai linguaggi di programmazione, sono tutti uguali dal punto di vista del consumo di energia? Naturalmente chi scrive software vi saprà dare delle risposte dirette di primo acchito, in base alla propria esperienza, alle proprie preferenze di sintassi di in base al problema che devono risolvere, ma quanti sanno veramente quali sono I migliori linguaggi se li valutiamo dal punto di vista della sostenibilità e del consumo di energia?

Qualche anno fa (2017) alcuni ricercatori portoghesi hanno fatto uno studio, testando 27 linguaggi di programmazione, cercando di capire se fosse possibile confrontare l’efficienza energetica dei linguaggi per lo sviluppo software e soprattutto porsi la domanda: Is Faster, greener ? [5]

Hanno affrontato lo studio in maniera rigorosa, monitorando le performance dei 27 linguaggi nella implementazione di 10 problemi di programmazione definiti nel CLBG (Computer Language Benchmark Game) e valutando vari aspetti: tempo di esecuzione, consumo di memoria e di energia, sia singolarmente che nel loro insieme.

Com’era da spettarsi, il linguaggio C è risultato il più efficiente in termini di tempo e di consumo di energia ed in generale i linguaggi compilati sono risultati essere i più veloci ed efficienti dal punto di vista energetico.

 

Ma è sempre vero che il linguaggio più veloce è anche il più efficiente dal punto di vista energetico?

Se guardiamo alla definizione di energia E(j) = Power(w)*Time(s), riducendo il tempo si riduce di conseguenza anche l'energia, ma non possiamo assumere che la potenza sia una costante, per cui il tema non è così scontato.

Nello stesso articolo, infatti, si vede che per alcuni benchmark ci sono soluzioni più efficienti ed il linguaggio C è solo terzo in classifica; In linea con le previsioni attese si è visto anche che il tempo di CPU e l’utilizzo della memoria sono in qualche modo correlati, ma se si guarda al risparmio di energia dal punto di vista del consumo di memoria, si vede che il fattore importante non è tanto la quantità di memoria utilizzata, ma come questa viene usata. Il linguaggio Java si posiziona tra i primi 5 linguaggi più veloci ma scende in basso in classifica quando si considera la quantità di memoria utilizzata. Il linguaggio Python è tra gli ultimi in classifica per quanto riguarda tempo di esecuzione e consumo di energia, come utilizzo di memoria sale un poco (ma rimane uno dei linguaggi top quando si devono sviluppare modelli di Machine learning).

Se guardiamo tutti i fattori considerati nel suo insieme (Energia, tempo di esecuzione ed utilizzo di memoria) non sempre quindi si può stabilire quale sia il linguaggio migliore da utilizzare.

Se ad esempio stiamo sviluppando una app per dispositivi wearable l'obiettivo primario potrebbe essere il risparmio di batteria e, quindi, l'ottimizzazione del tempo di esecuzione, ma se stiamo sviluppando un software che gira in background l'utilizzo della memoria potrebbe essere un fattore più importante del tempo di esecuzione ed in questo caso la scelta del linguaggio diventa più difficile.

In ogni caso ci sono molti altri fattori che devono essere presi in considerazione a partire dalle preferenze dei singoli sviluppatori (interpreti, versioni di compilatori, ambienti di esecuzione, documentazione disponibile, risorse disponibili…) e dal problema da risolvere. Obiettivo di questo studio non è quindi quello di dare una guida nella scelta del linguaggio, ma aiutare gli sviluppatori a diventare più consapevoli dal punto di vista dell'utilizzo di energia quando si programma e quindi più consapevoli dal punto di vista dell'impronta di carbonio che i programmi possono produrre.

 

Ora che abbiamo un po' di elementi per capire quanto performante è il linguaggio che utilizziamo per scrivere programmi, come possiamo fare per ottimizzare il consumo di energia? Le normative standard OMG definite secondo le specifiche ASCRSM (Automated Source Code Resource Sustainability Measure) ci vengono incontro e ci aiutano a capire quali sono le "best practice" di programmazione anche dal punto di vista dell’impronta di carbonio. 

 

Lo standard ASCRSM per lo sviluppo software

Lo standard ASCRSM ci elenca le CWE (common Weakness) più comuni che influenzano l'utilizzo di energia e delle risorse. Si basa sulla rilevazione ed il conteggio di 40 violazioni alle buone pratiche di sviluppo software e architetturali nel codice sorgente che potrebbero risultare in elaborazioni non necessarie o fallimenti che possono portare a delle interruzioni.

 

Un esempio di debolezza è il seguente:

Weaknesses_description

 

La rilevazione di questi pattern spesso dipende dall'esperienze dei programmatori e ci auguriamo che fin dalla scuola questa consapevolezza possa essere introdotta nei futuri scrittori di codice. Ma quali sono gli strumenti che ci possono aiutare a capire quanto il nostro codice è Green ?

 

CAST con le sue piattaforme Imaging e Highlight aiuta a misurare il software che viene prodotto, analizzando il codice sorgente, aiutandoci a capire quante "debolezze” ha e a darci una misura di quanto green è il nostro codice:

ASCRSM

Un esempio di debolezze rilevate nel codice:

Weaknesses_for_green

Una volta ottimizzata l'infrastruttura, CAST ci aiuta ad ottimizzare il portfolio applicativo, individuando le applicazioni energy-critical in base ai KPI misurati nel codice e ad implementare un piano di azione per il miglioramento degli stessi.

In conclusione, quello che emerge è l'importanza di definire dei KPI che misurino le efficienze dal punto di vista della sostenibilità del software che produciamo. In futuro queste pratiche dovranno essere sempre più integrate nei processi IT e nei processi decisionali a tutti I livelli.

 

La nuova direttiva europea CSRD
La recente approvazione a livello europeo della direttiva CSRD (Corporate Sustainability Reporting Directive) avrà un impatto significativo sulle aziende, obbligandole a pubblicare e revisionare periodicamente il bilancio di sostenibilità. Questo bilancio renderà conto in modo preciso e standardizzato dell'impronta carbonica delle aziende, seguendo il protocollo GHG (Greenhouse Gas Protocol).

Le aziende devono prepararsi ad adattarsi a questa nuova normativa e adottare pratiche sostenibili non solo per conformarsi ai requisiti normativi, ma anche per rispondere alle aspettative dei consumatori sempre più orientati alla sostenibilità e per contribuire positivamente alla lotta contro il cambiamento climatico.

Con la Software Intelligence di CAST le aziende possono trovare un valido strumento per realizzare un Green Gate del proprio portfolio applicativo e un processo di effettiva Sustainability by Design

FONTI:

[1] https://greensoftware.foundation/articles/what-is-green-software

[2] https://blog.castsoftware.it/sostenibilit%C3%A0-e-business-case-esg-con-cast

[3] https://www.intechopen.com/chapters/69865

 

[4] Sustainability, a surprisingly successful KPI: GreenOps survey results - ClimateAction.Tech

 

[5] Energy Efficiency across Programming Languages – How do Energy, Time and Memory relate ? https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf