O que uma empresa de software pode fazer para reduzir sua pegada de carbono
À medida que o mundo se torna mais consciente do impacto das mudanças climáticas, muitas empresas estão tomando medidas para reduzir sua pegada de carbono, e as empresas de software não são exceção
Vieolo é uma empresa de software em sua essência e há uma boa chance de que você, leitor deste artigo, também trabalhe na indústria de software.
O avanço do software tem sido uma faca de dois gumes para o meio ambiente. Por um lado, a indústria de software trouxe uma eficiência sem igual para muitas tarefas e evitou o uso de trilhões de pedaços de papel. Por outro lado, trabalhamos ativamente para aumentar o consumo de dados dos cidadãos médios, o que, subsequentemente, causou seus próprios problemas ambientais na forma de e-lixo e consumo de energia.
Independentemente do efeito geral positivo do nosso trabalho, precisamos reconhecer que nossas operações e produtos têm um impacto negativo no meio ambiente, e todos nós devemos nos comprometer a fazer nossa parte para reduzir nossa pegada de carbono, por menor que seja.
Entendemos que nossa pegada de carbono pode ser uma gota no oceano em comparação com outras empresas e indústrias, mas, ainda assim, tentamos adotar as seguintes estratégias desde o início de 2022.
Prevenção em vez de compensação
Embora compensar nosso consumo de energia através de créditos de carbono ou outros mecanismos possa ser uma parte importante de nossa estratégia geral de sustentabilidade, reduzir nosso consumo de energia deve ser a maior prioridade.
Existem problemas fundamentais com a abordagem atual de compensação de carbono. A eficácia da compensação de carbono depende da suposição de que o projeto de compensação não teria acontecido sem o investimento em compensação. No entanto, é difícil provar isso, e tem havido muitos casos em que projetos de compensação foram implementados mesmo sem financiamento de compensação.
Além disso, atualmente não há critérios amplamente aceitos para um projeto de compensação de carbono bem-sucedido. A eficácia de um projeto depende principalmente das alegações do fornecedor e a maioria das empresas não pode verificar independentemente sua eficácia. Como resultado, escolher um projeto de compensação, na época da redação deste artigo, envolve escolher um projeto aleatoriamente e contar com a sorte.
Na maioria dos casos, as empresas não se importam com o impacto ambiental e participam de um projeto de compensação de carbono apenas para satisfazer os requisitos regulatórios ou como uma manobra publicitária, embora tais manobras normalmente não beneficiem a imagem pública das empresas.
Embora programas de compensação genuínos tenham seus benefícios, devemos nos concentrar em reduzir nosso consumo de energia em primeiro lugar, em vez de tentar compensar seus danos posteriormente.
Claro, uma boa parte da energia que usamos envolve operações gerais que são semelhantes a qualquer outra empresa, como a energia usada em nossos escritórios e transporte. Aqui, estamos focados nas estratégias de economia de energia exclusivas para empresas de software.
Linguagens de programação e ferramentas
Executar um pedaço de código requer energia e há uma boa chance de que a energia que seu código usa seja produzida por combustíveis fósseis. A energia que nosso código usa é gasta, principalmente, em poder de processamento (CPU, GPU, etc.) e RAM. Ao reduzir o uso de CPU e memória, podemos supor com segurança que estamos usando uma quantidade menor de energia.
A quantidade de energia que nosso código usa é altamente dependente da linguagem de programação que usamos. Em geral, linguagens interpretadas (que dependem de um ambiente de execução) e aquelas com coletor de lixo usam uma quantidade maior de RAM e CPU em comparação com aquelas que são compiladas e não possuem coletor de lixo, respectivamente.
Por exemplo, um programa simples em Python usa muito mais CPU e RAM do que um programa semelhante escrito em C, já que o programa em Python tem que iniciar e usar o interpretador de Python, enquanto o programa em C não tem tal sobrecarga.
Embora possamos supor com segurança que linguagens como C ou Rust são mais eficientes em termos de energia do que linguagens como Javascript e Python, a quantificação dessa eficiência energética é bastante difícil. A fonte de informação mais confiável é um único estudo realizado por pesquisadores da Universidade do Minho, em Portugal. Este estudo afirma que, por exemplo, Javascript e Python consomem cerca de 4 e 75 vezes mais energia em comparação com C e Rust, respectivamente.
Mesmo que possamos questionar a precisão desta medição, a teoria geral foi comprovada repetidas vezes, tanto em pequenas quanto em grandes configurações. Por exemplo, o Discord reescreveu um de seus serviços, anteriormente escrito em Go, usando Rust. Embora Go já seja uma linguagem de alto desempenho, a implementação em Rust conseguiu superar a implementação em Go em todas as métricas, enquanto reduzia o uso geral de memória e CPU.
Usar linguagens de programação e ferramentas que não dependem de intérpretes e tempos de execução é uma das maneiras mais confiáveis de reduzir o consumo de energia que temos na indústria de software.
Em pequena escala, a diferença no consumo de energia entre as linguagens mais e menos eficientes é insignificante. A diferença de energia entre um pequeno programa em Python e Rust rodando na sua máquina local é tão pequena que provavelmente você nem consegue medi-la.
No entanto, independentemente da diferença insignificante em pequena escala, os desenvolvedores confiam no código já escrito por outros enquanto o código que escrevem pode acabar se tornando a base e a dívida técnica para futuros projetos. Por exemplo, em 1995 Brendan Eich criou o Javascript para o Netscape 2, supostamente em 10 dias, para permitir algumas funcionalidades básicas para sites. Em 2023, o Javascript se tornou a linguagem de programação mais usada. Mesmo que as chances sejam muito baixas, o projeto em que você está trabalhando agora pode acabar rodando em milhões de dispositivos.
Ao usar uma linguagem de programação, estamos participando ativamente do desenvolvimento e criação de seu ecossistema e dívida técnica. Ao escolher conscientemente linguagens mais eficientes e de alto desempenho que podem estar fora de nossa zona de conforto, podemos garantir a menor pegada de carbono do nosso código no futuro.
No entanto, isso não significa que devemos todos abandonar Python, Ruby e Javascript e começar a escrever código em Rust ou C. Cada uma dessas ferramentas foi criada por um motivo e tem seus próprios casos de uso.
Além da energia usada pelo aplicativo final, nós desenvolvedores também consumimos uma quantidade significativa de energia desenvolvendo o referido aplicativo. Em aplicações de grande escala, a energia usada durante o ciclo de desenvolvimento é provavelmente insignificante em comparação com a energia usada para rodar o aplicativo. Mas, em alguns casos, a energia que você usa escrevendo e depurando uma linguagem mais complexa, como Rust, pode ser tão alta que seria melhor usar Python desde o início.
Além disso, devido às fundações existentes e aos códigos base, você é forçado a usar uma determinada linguagem em certas situações. Se você está criando um site, você PRECISA usar Javascript, já que é a principal linguagem que os navegadores executam. Mesmo que você use outra linguagem de programação, seu código será transpilado em Javascript primeiro. Você pode usar linguagens como C ou Rust em um site através do Web Assembly, mas a menos que você tenha um caso de uso específico, seria melhor usar Javascript.
Escolha hardware eficiente
Embora a indústria de software frequentemente tenha uma influência limitada na direção do desenvolvimento de hardware, temos mais poder em nossas mãos do que pensamos.
Embora sejamos dependentes de fornecedores de hardware para rodar nosso código, o sucesso comercial de um produto de hardware depende fortemente do software disponível que pode rodar. Independentemente de quão bom um hardware seja, ele é completamente inútil se não houver software de qualidade compatível. Então, quando decidimos gastar nosso tempo e energia escrevendo software compatível com determinado hardware, estamos contribuindo para seu sucesso financeiro e a longevidade de seu design.
Se tivermos a capacidade de escolher (e implantar) o hardware necessário para rodar nosso código por conta própria, devemos nos esforçar para escolher os produtos mais eficientes em termos de energia.
Como exemplo, processadores ARM são mais eficientes em termos de energia do que seus equivalentes x86. Uma pesquisa realizada por dois pesquisadores brasileiros concluiu que SOCs baseados em ARM, quando usados para servidores HTTP e SQL, são de 3 a 4 vezes mais eficientes em termos de energia do que sistemas x86. Ao optar por escrever software para e com suporte a SOCs baseados em ARM em vez de x86, contribuímos para o sucesso financeiro e o desenvolvimento de hardware mais eficiente.
Use IA quando realmente for necessário
Os avanços em inteligência artificial estão entre as maiores conquistas da engenharia moderna, resolvendo problemas únicos que arquiteturas convencionais não podem resolver.
Para produzir um modelo de IA, precisamos analisar, preparar e processar um conjunto enorme de dados. O modelo de IA usará a análise do conjunto de dados para completar uma determinada tarefa quando apresentado a um novo conjunto de dados que nunca havia visto antes. Este processo é conhecido como treinamento.
Treinar um modelo de IA é um processo muito intensivo em termos de energia. De acordo com uma pesquisa da Universidade de Massachusetts Amherst, treinar um único modelo de IA pode emitir tanto carbono quanto a fabricação e uso de cinco carros durante suas vidas.
Então, antes de pensar em treinar um novo modelo de IA, precisamos nos fazer duas perguntas. Se a resposta a ambas as perguntas for não, somente então deveríamos começar o processo de treinar um modelo de IA personalizado.
O problema em questão pode ser resolvido efetivamente por software convencional? Se sim, deveríamos nos ater ao software convencional. Uma solução convencional é quase sempre mais eficiente em termos de energia do que um modelo de IA e, mesmo que a solução seja menos eficiente do que um modelo de IA treinado, a solução pode nunca ser usada o suficiente para superar a energia usada no treinamento.
O problema pode ser resolvido efetivamente por um modelo de IA pré-treinado? Se sim, deveríamos usar um modelo pré-treinado. Ao longo dos anos, muitos desenvolvedores treinaram vários modelos de IA para resolver problemas comuns a um nível aceitável. Usar um modelo pré-treinado economizará a enorme quantidade de energia necessária para treinar um modelo do zero.
O consumo de energia do processo de treinamento é um dos desafios importantes que a indústria tecnológica, incluindo nós, precisa resolver nos próximos anos.
Tenha um processo de desenvolvimento de produto sensato
Nós, desenvolvedores, somos igualmente influenciados pelo hype de novas tecnologias como qualquer outro grupo de pessoas. Por outro lado, todos nós escrevemos software que esperamos ser usado por um grande número de pessoas, por motivos econômicos ou pessoais.
Ao longo dos anos, a indústria de software tentou incluir ou integrar algumas das tecnologias em tendência nos produtos que desenvolvem. Em algum momento, tudo tinha um elemento de blockchain ou tentava ser descentralizado. Em outro ponto, tudo estava sendo escrito em Javascript. Atualmente, tudo tem uma IA generativa ou é “impulsionado por IA”, mesmo que a adição de IA possa ser totalmente inútil. Em muitos casos, a adição desses recursos da moda não se traduz no sucesso ou longevidade do projeto. Na verdade, o efeito pode ser o oposto.
O fracasso e o atraso de qualquer projeto significa que toda a energia e poluição criada para o desenvolvimento do produto foi em vão e os problemas que estavam tentando resolver continuarão sem solução. Ao ter um processo de desenvolvimento de produtos mais sensato em vez de empurrar recursos da moda para criar um burburinho de curto prazo, aumentamos a viabilidade dos nossos produtos e, a longo prazo, contribuímos para a redução de nossa pegada de carbono.
Seus interesses estão alinhados com o meio ambiente
Além dos benefícios óbvios de reduzir nossa pegada de carbono, na verdade é do nosso próprio interesse fazê-lo. A maioria das coisas que mencionamos acima também nos economiza dinheiro e/ou melhora nossos produtos.
Reduzir o uso de memória e CPU da nossa aplicação nos permite rodar nosso código usando hardware ou infraestrutura em nuvem mais baratos. Ter um sistema mais eficiente em termos de energia reduz nossas contas de energia. Focar nos recursos principais dos nossos produtos em vez de tentar incluir tecnologias desnecessárias, reduz o custo de desenvolvimento dos nossos produtos e ajuda em seu sucesso a longo prazo.
Implementar algumas dessas ideias é mais fácil falar do que fazer, mas nós, na indústria de software, precisamos fazer nossa parte para prevenir e mitigar nossa influência negativa no meio ambiente e clima.