Por qué systemd de Linux sigue siendo divisivo después de todos estos años

Un terminal Linux con texto en verde en un portátil.
fatmawati achmad zaenuri / Shutterstock

systemd tiene 10 años, pero los sentimientos al respecto en la comunidad de Linux no se han suavizado; es tan divisivo ahora como siempre. Aunque es utilizado por muchas de las principales distribuciones de Linux, la oposición incondicional no ha cedido.

La secuencia de arranque de Linux

Cuando enciende su computadora, el hardware arranca y luego (según el tipo de sector de arranque que utiliza su computadora ) se ejecuta el registro de arranque maestro (MBR) o se ejecuta la Interfaz de firmware extensible unificada (UEFI). La última acción de ambos es encender el kernel de Linux .

El kernel se carga en la memoria, se descomprime y se inicializa. Un sistema de archivos temporal se crea en la RAM, generalmente mediante una utilidad llamada initramfso initrd. Esto permite determinar y cargar los controladores necesarios. Esto, a su vez, permite que el sistema de archivos de espacio de usuario se cargue y se prepare para establecer el entorno de espacio de usuario.

La creación del entorno de espacio de usuario es manejada por el proceso init, que es el primer proceso lanzado por el kernel en un espacio de usuario. Tiene un  ID de proceso (PID) de 1. Todos los demás procesos son hijos directos o indirectos del proceso init.

Antes systemd, la corriente principal predeterminada para el proceso init era una reelaboración del sistema Unix System V init . Había otras opciones disponibles, pero System V init era la opción estándar en la mayoría de las distribuciones derivadas de la distribución de software no Berkeley (BSD). Debido a que vino directamente de System V Unix, el antepasado espiritual de Linux, mucha gente lo considera como «la forma oficial» de hacer init.

El proceso init inicia todos los demonios y servicios necesarios para que el sistema operativo funcione de forma significativa e interactiva. Estos demonios manejan cosas como la pila de redes, habilitando otro hardware dentro de su computadora y proporcionando una pantalla de inicio.

Muchos de estos procesos en segundo plano continúan ejecutándose después de iniciarse. Hacen cosas como registrar información de eventos, vigilar los cambios de hardware a medida que inserta o quita dispositivos y administran los inicios de sesión de los usuarios. Como era de esperar, el sistema de inicio también incluye funciones para administrar servicios.

Podemos usar pspara ver el proceso que tiene PID 1. Usaremos las  opciones ( flistado de formato completo) y p(PID):

ps -fp 1

ps -fp 1 en una ventana de terminal.

Vemos que el proceso con PID 1 es systemd. Ejecutar el mismo comando en Manjaro Linux produjo un resultado diferente. El proceso con PID 1 se identificó como  /sbin/init. Un vistazo rápido a ese archivo muestra que es un enlace simbólico a systemd:

ps -fp 1
ls -hl / sbin / init

ps -fp 1 en una ventana de terminal.

Usando la ppidopción (ID de proceso principal) con ps, podemos ver qué procesos han sido lanzados directamente por systemd:

ps -f --ppid 1

ps -f --ppid 1 en una ventana de terminal.

Es una lista bastante larga, como puede ver en la imagen de abajo.

ps -f --ppid 1 en una ventana de terminal.

Las alternativas

Varios proyectos han intentado producir una alternativa al sistema de inicialización tradicional de System V. Uno de los principales problemas es que, con System V init, todos los procesos se inician en serie, uno tras otro. Para mejorar la eficiencia de la secuencia de arranque, muchos proyectos alternativos utilizan el paralelismo para iniciar procesos de forma simultánea y asincrónica.

Relacionado:  ¿Qué son stdin, stdout y stderr en Linux?

Aquí hay información sobre algunos de estos:

  • Upstart:  desarrollado por Canonical , se usó en Ubuntu 9.10, Red Hat Red Hat Enterprise Linux (RHEL) 6, CentOS 6 y Fedora 9.
  • Runit : se  ejecuta en FreeBSD y otros derivados de BSD, macOS y  Solaris , así como en sistemas Linux. También es el sistema de inicio predeterminado en Void Linux.
  • s6-linux-init :  este reemplazo para System V init fue diseñado para seguir de cerca la filosofía de Unix , que a menudo se reduce a la frase «haz una cosa y hazla bien».

Hay muchos otros de diferente funcionalidad y diseño. Sin embargo, ninguno de ellos creó el furor que systemd  hizo.

El camino systemd

systemdfue lanzado en 2010 y se usó en Fedora en 2011. Desde entonces, ha sido adoptado por muchas distribuciones. Fue desarrollado por Lennart Poettering y Kay Sievers , dos ingenieros de software de RedHat.

systemdes mucho más que un reemplazo de init. Más bien, es un conjunto de aproximadamente 70 binarios que manejan la inicialización del sistema, los demonios y los servicios, el registro y el diario, y muchas otras funciones que ya estaban manejadas por módulos dedicados en Linux. La mayor parte de estos no tienen nada que ver con la inicialización del sistema.

Algunos de los demonios proporcionados por systemdson:

  • systemd-udevd: gestiona dispositivos físicos.
  • systemd-logind: administra los inicios de sesión de los usuarios.
  • systemd-resuelto: proporciona resolución de nombres de red a aplicaciones locales.
  • systemd-networkd : administra y detecta dispositivos de red y administra configuraciones de red.
  • systemd-tmpfiles: crea, elimina y limpia archivos y directorios temporales y volátiles.
  • systemd-localed: administra la configuración regional del sistema.
  • systemd-machined: detecta y supervisa contenedores y máquinas virtuales.
  • systemd-nspawn: puede iniciar un comando u otro proceso en un contenedor de espacio de nombres ligero, lo que proporciona una funcionalidad similar a chroot .

Y eso es solo la punta del iceberg, que también es el meollo del asunto. systemdHace mucho tiempo que superó lo que se requiere de un sistema de inicio, que, según sus oponentes, es la definición misma de alcance.

«Es muy grande. Hace demasiado «.

Los oponentes systemdseñalan la gran y curiosa combinación de funciones que abarca. Todas estas características ya existían en Linux y, quizás, algunas de ellas necesitaban una actualización o un nuevo enfoque. Sin embargo, agrupar toda esta funcionalidad en lo que se supone que es un sistema de inicio es arquitectónicamente desconcertante.

systemdse ha llamado un punto único de falla para demasiadas funciones críticas, pero esto no parece ser justificable. Es cierto que arroja la filosofía Unix  de crear pequeñas herramientas que funcionan juntas en lugar de grandes piezas de software que hacen todo por la ventana. Si bien  systemdno es estrictamente monolítico (se compone de muchos binarios en lugar de uno solo enorme), incluye muchas herramientas de administración y comandos dispares bajo un mismo paraguas.

Si bien puede que no sea monolítico, es grande. Para tener una idea de la escala, contamos las líneas de texto en la base de código del kernel 5.6.15 y la systemdrama maestra del repositorio de GitHub .

Relacionado:  Cómo usar el comando strings en Linux

Esta fue una métrica relativamente burda. Contaba líneas de texto, no solo líneas de código. Entonces, esto incluyó comentarios, documentación y todo lo demás. Sin embargo, fue una comparación similar y nos dio un criterio simple:

(buscar ./ ​​-nombre '*. *' -print0 | xargs -0 cat) | wc -l

El núcleo tenía casi 28 millones (27,784,340, para ser exactos) de líneas de texto. Por el contrario,  systemd tenía 1.349.969, o casi 1,4 millones. Con nuestra métrica despreocupada,  systemdresulta en aproximadamente un 5 por ciento del tamaño del kernel, ¡lo cual es una locura!

Como otra comparación, el recuento de líneas para una implementación moderna de System V init para la distribución Arch Linux fue de 1,721 líneas.

Poettering claramente no tiene en cuenta la  Sociedad de Computación del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE), ni el estándar de Interfaz de Sistema Operativo Portátil (POSIX). De hecho,  animó a los desarrolladores a ignorar POSIX :

“Por lo tanto, obtenga una copia de la Interfaz de programación de Linux, ignore todo lo que dice sobre la compatibilidad con POSIX y elimine su increíble software de Linux. ¡Es muy reconfortante! «

Ha habido acusaciones de que  systemd es un proyecto de Red Hat que solo beneficia a Red Hat, pero está siendo forzado al mundo Linux en general. Sí, nació dentro de Red Hat y está gobernado y dirigido por él. Sin embargo, de los 1.321 colaboradores, solo una fracción trabaja para Red Hat.

Entonces, ¿cuáles son los beneficios de Red Hat?

Jim Whitehurst , el presidente de IBM, quien alguna vez fue el CEO de Red Hat, dijo:

“Red Hat consideró muchas opciones disponibles e incluso usó Upstart de Canonical para Red Hat Enterprise Linux 6. En última instancia, elegimos systemd porque es la mejor arquitectura que proporciona la extensibilidad, simplicidad, escalabilidad e interfaces bien definidas para abordar los problemas que vemos hoy y prever en el futuro «.

Whitehurst también dijo que también vieron beneficios en los sistemas integrados. Red Hat se asocia con «los proveedores integrados más grandes del mundo, particularmente en las industrias de telecomunicaciones y automotriz, donde la estabilidad y la confiabilidad son la principal preocupación».

Estas parecen razones técnicamente sólidas. Puede comprender la necesidad de confiabilidad de la empresa y no es descabellado que Red Hat se preocupe por sus propios intereses, pero ¿deberían todos los demás hacer lo mismo?

¿Beber el Kool-Aid systemd?

Algunos detractores systemddicen que las distribuciones y la gente simplemente siguen ciegamente el ejemplo de Red Hat y lo adoptan.

Sin embargo, al igual que la frase, «beber Kool-Aid», no es del todo correcta. Acuñada en 1978 después de que el líder de la secta, Jim Jones , obligó a sus más de 900 seguidores a suicidarse bebiendo un líquido con sabor a uva mezclado con cianuro, la frase avergüenza incorrectamente a Kool-Aid. El grupo realmente bebió Flavor Aid, pero Kool-Aid ha sido contaminado por ese cepillo desde entonces.

Además, las distribuciones de Linux no siguen ciegamente a Red Hat; están adoptando systemddespués de una seria deliberación. El debate rabió en las listas de correo de Debian durante mucho tiempo. Sin embargo, en 2014, la comunidad votó a favor de adoptar systemdcomo sistema de inicio predeterminado, pero también de admitir alternativas .

Relacionado:  Cómo usar el comando chgrp en Linux

Debian es un ejemplo importante porque no se deriva de RedHat, Fedora o CentOS. No hay ningún steerage aplicado a Debian desde Red Hat. Y Debian, como PID 1, tiene muchos descendientes, incluido Ubuntu y sus muchas derivaciones.

Las decisiones tomadas por la comunidad Debian son de gran alcance. También se debaten enérgicamente y se vota sobre el método de votación Condorcet . La comunidad tampoco toma esas decisiones a la ligera.

Votó de nuevo en diciembre de 2019  para seguir centrándose systemd  y seguir explorando alternativas. Lo contrario de seguir ciegamente, este es en realidad un ejemplo de libro de texto de democracia y libertad de elección en el trabajo.

Las limitaciones de la elección

Por lo general, no puede elegir si usar systemd con una distribución de Linux en particular. Más bien, las propias distribuciones eligen si quieren usarlo, y usted puede elegir qué distribución de Linux prefiere. Quizás haya cambiado a una distribución de Linux que le guste systemd. Como un músico favorito que cambia de género, esto puede resultar discordante.

Las personas que usan Debian, Fedora , CentOS , Ubuntu , Arch , SolusopenSUSE , y se oponen a la adopción de systemd, pueden sentir que están siendo excluidas del uso de la distribución de su elección. Si se sienten lo suficientemente convencidos acerca de cualquiera de las opciones arquitectónicas, el arrastre del alcance o el desprecio por POSIX, es posible que les resulte insostenible seguir usando esa distribución.

Hay un espectro, por supuesto. En un extremo, tienes a las personas que no comprenden los problemas (o que no les importa), y en el otro, tienes a los objetores apasionados. En algún lugar intermedio están aquellos a quienes no les gustan los cambios, pero no les molestan lo suficiente como para abandonar el barco. Pero, ¿qué pasa con los refugiados de distribución, que no pueden permanecer en la distribución elegida debido a sus preferencias o principios?

Desafortunadamente, no es tan fácil como instalar el sistema de inicio que desee. No todo el mundo tiene la capacidad técnica para hacer eso, sin importar las dificultades que surgen cuando las aplicaciones o entornos de escritorio, como GNOME,  tienen dependencias de systemd .

¿Qué hay de pasar a otra distribución? Algunos, como  Devuan , aparecieron como no systemdbifurcaciones de distribuciones (en este caso, Debian) que habían adoptado systemd. El uso de Devuan debería ser similar a la distribución principal, pero ese no es el caso para todas las que no son systemdbifurcaciones. Por ejemplo, si abandona Fedora y pasa a AntiX , Gentoo o Slackware , tendrá una experiencia muy diferente.

No va a ninguna parte

Me gusta algo de lo que  systemdhace (mecanismos de control simples y estandarizados para procesos). No entiendo la justificación de algunas de sus funciones (registros binarios). También me disgusta algo de lo que hace ( renovar las carpetas de inicio, ¿ quién pidió eso?).

Distribuciones como Debian están haciendo lo inteligente e investigando alternativas para mantener abiertas sus opciones. Sin embargo, systemdestá en él a largo plazo.

Si administra máquinas Linux para otros, aprenda systemdtan bien como conozca System V init. De esta manera, no importa con cuál se encuentre, podrá realizar sus funciones.

¿Solo usa Linux en casa? Si es así, elija una distribución que satisfaga sus necesidades técnicas y complemente su ideología de Linux.