Lo que una empresa de software puede hacer para reducir su huella de carbono
A medida que el mundo toma conciencia del impacto del cambio climático, muchas empresas están tomando medidas para reducir su huella de carbono, y las empresas de software no son la excepción
Vieolo es principalmente una empresa de software y hay una buena probabilidad de que tú, el lector de este artículo, también trabajes en la industria del software.
El avance del software ha sido una espada de doble filo para el medio ambiente. Por un lado, la industria del software en conjunto ha aportado una eficiencia incomparable a muchas tareas y ha evitado el uso de trillones de piezas de papel. Por otro lado, hemos trabajado activamente para aumentar el consumo de datos de los ciudadanos promedio, lo cual, subsecuentemente, ha causado sus propios problemas ambientales en forma de desechos electrónicos y consumo de energía.
Independientemente del efecto positivo general de nuestro trabajo, necesitamos reconocer que nuestras operaciones y productos tienen un impacto negativo en el medio ambiente, y todos debemos comprometernos a hacer nuestra parte para reducir nuestra huella de carbono, por pequeña que sea.
Entendemos que nuestra huella de carbono podría ser una gota en el océano en comparación con otras empresas e industrias, pero, no obstante, hemos intentado adoptar las siguientes estrategias desde el inicio de 2022.
Prevención en lugar de compensación
Mientras que compensar nuestro consumo energético a través de créditos de carbono u otros mecanismos puede ser una parte importante de nuestra estrategia de sostenibilidad, reducir nuestro consumo energético debería ser la máxima prioridad.
Existen problemas fundamentales con el enfoque actual para la compensación de carbono. La efectividad de la compensación de carbono depende de la suposición de que el proyecto de compensación no habría ocurrido sin la inversión en compensación. Sin embargo, esto es difícil de probar, y ha habido muchos casos en los que se ha descubierto que proyectos de compensación fueron implementados incluso sin la financiación de la compensación.
Además, actualmente no hay criterios ampliamente aceptados para un proyecto exitoso de compensación de carbono. La efectividad de un proyecto depende principalmente de las afirmaciones del vendedor y la mayoría de las empresas no pueden verificar de manera independiente su efectividad. Como resultado, elegir un proyecto de compensación, al momento de escribir, implica seleccionar un proyecto al azar y confiar en la suerte.
En la mayoría de los casos, a las empresas no les importa el impacto ambiental y participan en un proyecto de compensación de carbono ya sea para satisfacer los requisitos regulatorios o como un truco publicitario, aunque tales trucos publicitarios generalmente no benefician la imagen pública de las empresas.
Aunque los programas de compensación genuinos tienen sus beneficios, deberíamos concentrarnos en reducir nuestro consumo energético desde el principio en lugar de intentar compensar sus daños después.
Por supuesto, una buena parte de la energía que utilizamos involucra operaciones generales que son similares a cualquier otra empresa, como la energía utilizada en nuestras oficinas y el transporte. Aquí, nos enfocamos en las estrategias de ahorro de energía únicas para empresas de software.
Lenguajes de programación y herramientas
Ejecutar un código requiere energía y hay una buena probabilidad de que la energía que utiliza tu código se produzca con combustibles fósiles. La energía que utiliza nuestro código se gasta principalmente en la potencia de procesamiento (CPU, GPU, etc.) y RAM. Al reducir el uso de CPU y memoria, podemos suponer con seguridad que estamos utilizando una menor cantidad de energía.
La cantidad de energía que utiliza nuestro código depende en gran medida del lenguaje de programación que usamos. En general, los lenguajes interpretados (que dependen de un entorno de ejecución) y aquellos con un recolector de basura utilizan una mayor cantidad de RAM y CPU en comparación con aquellos que son compilados y no tienen recolector de basura, respectivamente.
Por ejemplo, un simple programa en Python utiliza mucho más CPU y RAM que un programa similar escrito en C, ya que el programa en Python tiene que iniciar y usar el intérprete de Python mientras que el programa en C no tiene tal sobrecarga.
Aunque podemos asumir con seguridad que lenguajes como C o Rust son más eficientes energéticamente que lenguajes como Javascript y Python, la cuantificación de esta eficiencia energética es bastante difícil. La fuente de información más confiable es un único estudio realizado por investigadores de la Universidad de Minho en Portugal. Este estudio afirma que, por ejemplo, Javascript y Python consumen aproximadamente 4 y 75 veces más energía en comparación con C y Rust respectivamente.
Aunque podemos debatir sobre la exactitud de esta medición, la teoría general ha sido probada una y otra vez, tanto en configuraciones pequeñas como grandes. Por ejemplo, Discord reescribió uno de sus servicios, previamente escrito en Go, usando Rust. Aunque Go ya es un lenguaje de alto rendimiento, la implementación en Rust logró superar a la implementación en Go en cada métrica mientras reducía el uso total de memoria y CPU.
Usar lenguajes de programación y herramientas que no dependen de intérpretes y entornos de ejecución es una de las formas más confiables de reducir el consumo de energía que tenemos en la industria del software.
A pequeña escala, la diferencia en el consumo de energía entre los lenguajes más y menos eficientes es insignificante. La diferencia de energía entre un pequeño programa en Python y Rust ejecutándose en tu máquina local es tan pequeña que probablemente ni siquiera puedas medirla.
Sin embargo, independientemente de la diferencia insignificante a pequeña escala, los desarrolladores dependen del código ya escrito por otros, mientras que el código que escriben puede terminar siendo la base y la deuda técnica para proyectos futuros. Por ejemplo, en 1995 Brendan Eich creó Javascript para Netspace 2, supuestamente en 10 días, para permitir algunas funcionalidades básicas en los sitios web. Para 2023, Javascript se ha convertido en el lenguaje de programación más utilizado. Aunque las probabilidades son muy bajas, el proyecto en el que estás trabajando ahora podría terminar ejecutándose en millones de dispositivos.
Al usar un lenguaje de programación, estamos participando activamente en el desarrollo y creación de su ecosistema y deuda técnica. Al elegir conscientemente lenguajes más eficientes y de mayor rendimiento que podrían estar fuera de nuestra zona de confort, podemos asegurar una menor huella de carbono de nuestro código a largo plazo.
Sin embargo, no significa que todos debamos abandonar Python, Ruby y Javascript y comenzar a escribir código en Rust o C. Cada una de estas herramientas fue creada por una razón y tiene sus propios casos de uso.
Además de la energía utilizada por la aplicación final, nosotros los desarrolladores también consumimos una cantidad no trivial de energía desarrollando dicha aplicación. En aplicaciones a gran escala, la energía utilizada durante el ciclo de desarrollo probablemente sea insignificante en comparación con la energía utilizada para ejecutar la aplicación. Pero en algunos casos, la energía que usas escribiendo y depurando un lenguaje más complejo como Rust puede ser tan alta que sería mejor usar Python desde el principio.
Además, debido a las bases y códigos existentes, te ves obligado a usar cierto lenguaje en ciertas situaciones. Si estás creando un sitio web, NECESITAS usar Javascript ya que es el lenguaje principal que ejecutan los navegadores. Incluso si usas otro lenguaje de programación, tu código se transpilará primero a Javascript. Puedes usar lenguajes como C o Rust en un sitio web a través de Web Assembly, pero a menos que tengas un caso de uso específico, estarías mejor con Javascript.
Elige hardware eficiente
Aunque la industria del software a menudo tiene una influencia limitada en la dirección del desarrollo del hardware, tenemos más poder en nuestras manos de lo que pensamos.
Aunque dependemos de los proveedores de hardware para ejecutar nuestro código, el éxito comercial de un producto de hardware depende en gran medida del software disponible que pueda ejecutar. Independientemente de lo bueno que sea un hardware, es completamente inútil si no hay software compatible de calidad. Entonces, cuando decidimos gastar nuestro tiempo y energía escribiendo software compatible con cierto hardware, estamos contribuyendo a su éxito financiero y a la longevidad de su diseño.
Si tenemos la capacidad de elegir (y desplegar) el hardware necesario para ejecutar nuestro código, deberíamos hacer un esfuerzo por elegir los productos más eficientes en energía.
Como ejemplo, los procesadores ARM son más eficientes en energía que sus homólogos x86. Una investigación realizada por dos investigadores brasileños concluyó que los SOCs basados en ARM, cuando se usan para servidores HTTP y SQL, son de 3 a 4 veces más eficientes en energía que los sistemas x86. Al elegir escribir software para y apoyar SOCs basados en ARM en lugar de x86, contribuimos al éxito financiero y al desarrollo más eficiente de hardware.
Usa IA cuando realmente sea necesario
Los avances en inteligencia artificial están entre los mayores logros de la ingeniería moderna, resolviendo problemas únicos que las arquitecturas convencionales no pueden resolver.
Para producir un modelo de IA, tenemos que analizar, preparar y procesar un conjunto enorme de datos. El modelo de IA utilizará el análisis del conjunto de datos para completar una tarea determinada cuando se le presente un dato nuevo que nunca se haya visto antes. Este proceso se conoce como entrenamiento.
Entrenar un modelo de IA es un proceso muy intensivo en energía. Según una investigación de la Universidad de Massachusetts Amherst, entrenar un solo modelo de IA puede emitir tanto carbono como fabricar y usar cinco coches durante sus vidas útiles.
Entonces, antes de pensar en entrenar un nuevo modelo de IA, necesitamos hacernos dos preguntas. Si la respuesta a ambas preguntas es no, solo entonces deberíamos comenzar el proceso de entrenamiento de un modelo de IA personalizado.
¿Puede el problema en cuestión resolverse eficazmente con software convencional? Si es así, deberíamos ceñirnos al software convencional. Una solución convencional es casi siempre más eficiente energéticamente que un modelo de IA e incluso si la solución es menos eficiente que un modelo de IA entrenado, es posible que la solución nunca se utilice lo suficiente como para superar la energía utilizada en el entrenamiento.
¿El problema puede resolverse eficazmente con un modelo de IA preentrenado? Si es así, deberíamos usar un modelo preentrenado. A lo largo de los años, muchos desarrolladores han entrenado varios modelos de IA para resolver problemas comunes a un nivel aceptable. Usar un modelo preentrenado ahorrará la enorme cantidad de energía necesaria para entrenar un modelo desde cero.
El consumo de energía del proceso de entrenamiento es uno de los desafíos importantes que la industria tecnológica, incluyéndonos a nosotros, tiene que resolver en los próximos años.
Tener un proceso de desarrollo de productos sensato
Nosotros, los desarrolladores, estamos igualmente influenciados por la moda de las nuevas tecnologías como cualquier otro grupo de personas. Por otro lado, todos escribimos software que esperamos que sea utilizado por un gran número de personas, ya sea por razones económicas o personales.
A lo largo de los años, la industria del software ha tratado de incluir o integrar algunas de las tecnologías de moda en los productos que desarrollan. En algún momento, todo tenía un elemento de blockchain o intentaba ser descentralizado. En otro momento, todo se escribía en Javascript. Actualmente, todo tiene una IA generativa o está "impulsado por IA" aunque la adición de IA podría ser completamente inútil. En muchos casos, la adición de estas características de moda no se traduce en el éxito o la longevidad del proyecto. De hecho, el efecto podría ser el opuesto.
El fracaso y el retraso de cualquier proyecto significa que toda la energía y la contaminación creada para el desarrollo del producto ha sido en vano y los problemas que estaban tratando de resolver, permanecerán sin resolver. Al tener un desarrollo de producto más sensato en lugar de incorporar características de moda para crear un chispazo a corto plazo, aumentamos la viabilidad de nuestros productos y a largo plazo, contribuimos a una reducción de nuestra huella de carbono.
Tus intereses están alineados con el medio ambiente
Además de los beneficios evidentes de reducir nuestra huella de carbono, en realidad es de nuestro propio interés hacerlo. La mayoría de las cosas de las que hablamos anteriormente también nos ahorran dinero y/o mejoran nuestros productos.
Reducir el uso de memoria y CPU de nuestra aplicación nos permite ejecutar nuestro código utilizando hardware o infraestructura en la nube más baratos. Tener un sistema más eficiente en energía reduce nuestras facturas de energía. Enfocarse en las características principales de nuestros productos en lugar de tratar de incluir tecnologías innecesarias, reduce el costo de desarrollo de nuestros productos y ayuda a su éxito a largo plazo.
Implementar algunas de estas ideas es más fácil decirlo que hacerlo, pero nosotros, en la industria del software, necesitamos hacer nuestra parte para prevenir y mitigar nuestra influencia negativa en el medio ambiente y el clima.