Por qué systemd de Linux sigue siendo divisivo después de todos estos años
Publicado: 2022-01-29systemd 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 se inicia y luego (según el tipo de sector de inicio que utiliza su computadora) se ejecuta el registro de inicio maestro (MBR) o se ejecuta la interfaz de firmware extensible unificada (UEFI). La última acción de ambos es iniciar el kernel de Linux.
El núcleo se carga en la memoria, se descomprime y se inicializa. Un sistema de archivos temporales se crea en la RAM, generalmente mediante una utilidad llamada initramfs
o initrd
. Esto permite determinar y cargar los controladores necesarios. Esto, a su vez, permite que el sistema de archivos del espacio del usuario se cargue y se prepare para establecer el entorno del espacio del usuario.
La creación del entorno del espacio de usuario está a cargo del proceso init, que es el primer proceso iniciado por el núcleo 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 de systemd
, el valor predeterminado principal para el proceso de inicio era una reelaboración del sistema Unix 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 que no eran de Berkeley Software Distribution (BSD). Debido a que vino directamente de System V Unix, el ancestro espiritual de Linux, muchas personas lo consideran "la forma oficial" de hacer init.
El proceso init inicia todos los demonios y servicios necesarios para que el sistema operativo funcione de manera significativa e interactiva. Estos demonios manejan cosas como la pila de red, 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 que se inician. Hacen cosas como registrar información de eventos, observar cambios de hardware a medida que inserta o extrae dispositivos y administra los inicios de sesión de los usuarios. Como era de esperar, el sistema init también incluye funciones para administrar servicios.
Podemos usar ps
para ver el proceso que tiene PID 1. Usaremos las opciones f
(lista de formato completo) y p
(PID):
pd-fp 1
Vemos que el proceso con PID 1 es systemd
. Ejecutar el mismo comando en Manjaro Linux arrojó un resultado diferente. El proceso con PID 1 se identificó como /sbin/init
. Una mirada rápida a ese archivo muestra que es un enlace simbólico a systemd
:
pd-fp 1
ls -hl /sbin/init
Usando la ppid
(ID de proceso principal) con ps
, podemos ver qué procesos han sido lanzados directamente por systemd
:
ps -f --ppid 1
Es una lista bastante larga, como se puede ver en la imagen de abajo.
Las alternativas
Varios proyectos han tratado de producir una alternativa al inicio tradicional del Sistema 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 concurrente y asíncrona.
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 del sistema
systemd
se lanzó 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.
systemd
es mucho más que un reemplazo de inicio. Más bien, es un conjunto de aproximadamente 70 archivos binarios que manejan la inicialización del sistema, demonios y servicios, registro y diario, y muchas otras funciones que ya eran 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 systemd
son:
- systemd-udevd: Administra dispositivos físicos.
- systemd-logind: administra los inicios de sesión de los usuarios.
- systemd-resolved: proporciona resolución de nombres de red a las aplicaciones locales.
- systemd-networkd : administra y detecta dispositivos de red y administra configuraciones de red.
- systemd-tmpfiles: crea, elimina y limpia archivos y directorios volátiles y temporales.
- systemd-localed: administra la configuración regional del sistema.
- systemd-machined: detecta y supervisa máquinas virtuales y contenedores.
- systemd-nspawn: puede iniciar un comando u otro proceso en un contenedor de espacio de nombres liviano, brindando una funcionalidad similar a chroot.
Y eso es solo la punta del iceberg, que es también el quid de la cuestión. Hace tiempo que systemd
superó lo que se requiere de un sistema init, que, según sus oponentes, es la definición misma de alcance lento.
"Es muy grande. Hace demasiado.
Los opositores de systemd
señalan la gran y curiosa combinación de funcionalidades 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.
systemd
ha sido llamado un punto único de falla para demasiadas funciones críticas, pero esto no parece ser justificable. Es cierto que arroja la filosofía de Unix de crear pequeñas herramientas que funcionan juntas en lugar de grandes piezas de software que hacen todo por la ventana. Si bien systemd
no es estrictamente monolítico (está compuesto por muchos archivos binarios en lugar de uno solo grande), 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 el código base del kernel 5.6.15 y la rama maestra systemd
del repositorio de GitHub.
Esta era una métrica relativamente cruda. Contó líneas de texto, no solo líneas de código. Entonces, esto incluía 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) líneas de texto. Por el contrario, systemd
tenía 1.349.969, o casi 1,4 millones. Con nuestra métrica feliz y despreocupada, systemd
tiene 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 resultó en 1721 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:
“Entonces, obtenga una copia de la interfaz de programación de Linux, ignore todo lo que dice sobre la compatibilidad con POSIX y piratee su increíble software de Linux. ¡Es bastante aliviador!”
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 es gobernado y dirigido por él. Sin embargo, de los 1321 colaboradores, solo una fracción trabaja para Red Hat.
Entonces, ¿cuáles son los beneficios para Red Hat?
Jim Whitehurst, presidente de IBM, quien alguna vez fue director ejecutivo 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 brinda la extensibilidad, la simplicidad, la escalabilidad y las 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 busque sus propios intereses, pero ¿deberían todos los demás hacer lo mismo?
¿Beber el systemd Kool-Aid?
Algunos opositores de systemd
dicen 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", eso no es del todo correcto. Acuñada en 1978 después de que el líder de la secta, Jim Jones, obligara 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 en realidad bebió Flavor Aid, pero Kool-Aid ha sido manchado por ese cepillo desde entonces.
Además, las distribuciones de Linux no siguen ciegamente a Red Hat; están adoptando systemd
después de una seria deliberación. El debate prosiguió en las listas de correo de Debian durante mucho tiempo. Sin embargo, en 2014, la comunidad votó para adoptar systemd
como el sistema de inicio predeterminado, pero también para admitir alternativas.
Debian es un ejemplo importante porque no se deriva de RedHat, Fedora o CentOS. Red Hat no aplica orientación a Debian. Y Debian, como PID 1, tiene muchos descendientes, incluido Ubuntu y sus muchos derivados.
Las decisiones que toma la comunidad de Debian son de largo alcance. También se debaten enérgicamente y se vota usando el método de votación de Condorcet. La comunidad tampoco toma esas decisiones a la ligera.
Votó nuevamente en diciembre de 2019 para continuar enfocándose en systemd
y continuar explorando alternativas. Lo opuesto a 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 tú puedes elegir qué distribución de Linux prefieres. Tal vez una distribución de Linux que le encanta cambió a systemd
. Como un músico favorito que cambia de género, esto puede ser discordante.
Las personas que usan Debian, Fedora, CentOS, Ubuntu, Arch, Solus y openSUSE, y se oponen a la adopción de systemd
, pueden sentir que se les está impidiendo usar la distribución de su elección. Si se sienten lo suficientemente convencidos acerca de cualquiera de las opciones arquitectónicas, el avance 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, están las personas que no entienden los problemas (o ni siquiera les importa), y en el otro, están los objetores apasionados. En algún lugar en el medio están aquellos a quienes no les gustan los cambios, pero no les molesta lo suficiente como para abandonar el barco. Pero, ¿qué pasa con los refugiados de distribución, que no pueden permanecer en su 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 hacerlo, sin importar las dificultades que surgen cuando las aplicaciones o los entornos de escritorio, como GNOME, tienen dependencias en systemd
.
¿Qué hay de pasar a otra distribución? Algunos, como Devuan, aparecieron como bifurcaciones de distribuciones que no eran systemd
(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 bifurcaciones que no son systemd
. Por ejemplo, si deja Fedora y se cambia a AntiX, Gentoo o Slackware, tendrá una experiencia muy diferente.
No va a ninguna parte
Me gusta algo de lo que hace systemd
(mecanismos de control simples y estandarizados para procesos). No entiendo la razón de algo de lo que hace (registros binarios). También me disgusta algo de lo que hace (renovar las carpetas de inicio, ¿quién pidió eso?).
Las distribuciones como Debian están haciendo lo inteligente e investigando alternativas para mantener sus opciones abiertas. Sin embargo, systemd
está en esto a largo plazo.
Si administra máquinas Linux para otros, aprenda systemd
tan bien como conoce System V init. De esta manera, sin importar con cuál te encuentres, podrás realizar tus deberes.
¿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.
RELACIONADO: Systemd cambiará el funcionamiento de su directorio de inicio de Linux