Cómo se diferencia el Linux moderno el uno del otro

Durante más de 15 años he trabajado para Fast Reports y, por la naturaleza de mi trabajo, a menudo tengo que lidiar con Linux, brindando soporte para uno de los productos. He estado familiarizado con Linux por un poco más de tiempo: instalé Slackware por primera vez en 1997. En consecuencia, teniendo algo de experiencia, quiero compartir con ustedes mi opinión sobre cómo, en mi opinión, las distribuciones modernas de Linux difieren entre sí. Todo lo descrito en el artículo es una opinión subjetiva y no pretende ser una verdad absoluta.



El sistema operativo Linux remonta su historia a 1991, cuando el estudiante finlandés Linus Torvalds comenzó a desarrollar un nuevo sistema operativo, inspirado en las ideas de Unix y Minix. La elección exitosa de una licencia gratuita predeterminó el éxito de su empresa: docenas y cientos de entusiastas se unieron al desarrollo, cada uno de los cuales trajo algo nuevo. Posteriormente, grandes empresas se unieron al desarrollo: Intel, IBM y otros. No conozco las razones exactas que llevaron a los líderes de la industria a respaldar un sistema operativo gratuito, pero las "malas lenguas" dicen que muchas compañías decidieron mudar a Microsoft, que en ese momento tenía el monopolio absoluto de los sistemas operativos para computadoras de escritorio.



Evolución del kernel de Linux expresada en número de líneas



imagen



¿Podría Linux, sin el apoyo de los maestros de la industria, convertirse en lo que es ahora? Lejos de ser un hecho, los veteranos recuerdan las guerras de patentes entre la Operación Santa Cruz y las compañías que respaldan Linux. SCO perdió esta guerra y ya no existe.



El número de compromisos con el núcleo por empresa



imagen



Por lo tanto, durante su vida, el sistema operativo Linux ha recorrido un largo camino de evolución y ahora se ha convertido en un sistema operativo popular capaz de reemplazar a Windows para resolver muchas de las tareas urgentes de los usuarios.



Antes de comenzar a comparar las distribuciones modernas de Linux, debemos definir dos aspectos importantes: el primer aspecto es en qué consiste el sistema operativo y el segundo es desde qué punto de vista compararemos. Por kit de distribución nos referimos a una solución completa que consiste en un núcleo del sistema operativo, un servidor gráfico (servidor X), un entorno (un conjunto de programas suministrados), una utilidad de instalación y una configuración inicial. Es posible comparar distribuciones desde el punto de vista del usuario final, el administrador del sistema y el programador de aplicaciones.



Linux desde el punto de vista del administrador del sistema



Al comienzo de su desarrollo, Linux era un grupo de tecnólogos y sacerdotes tecnológicos con conocimientos específicos de programación y administración. El precursor de Linux fue el sistema operativo Unix, y un especialista con experiencia en la administración de Unix podría configurar y configurar el sistema fácilmente. Esto era inaccesible para el usuario promedio promedio, y el proceso de administración para él era algo similar a la magia. Linux moderno se ha vuelto fácil de usar: el proceso de instalación se reduce a responder algunas preguntas y, a menudo, es suficiente con estar de acuerdo con la opción de configuración ofrecida por el instalador, simplemente respondiendo positivamente a todas las preguntas: el instalador analizará la configuración del hardware y seleccionará los controladores y parámetros de configuración necesarios. Por lo general, el kit de distribución contiene paquetes de software listos para usar,suministrado en forma de archivos DEB o RPM que contienen, además de los propios programas, scripts de configuración e información sobre dependencias en bibliotecas de terceros. Sin embargo, hay excepciones, por ejemplo, la distribución de Gentoo se suministra como una fuente cuando todos los programas y reglas de compilación, y el sistema operativo en sí se construye literalmente en la computadora del usuario para la configuración de su procesador. La cuestión de la efectividad de tal método es controvertida, no profundizaremos en él, solo señalaré que este es solo uno de los grados de libertad declarados por la comunidad: el usuario es libre de elegir "si vale la pena". En general, los formatos de paquete RPM y DEB son similares, y al elegir un kit de distribución, puede ignorar este punto. Con raras excepciones, a veces sucedeque el autor del programa por alguna razón no proporcionó la segunda versión del instalador y solo existe en formato RPM (RedHat Linux y sus derivados) o DEB (Debian Linux y sus derivados). En este caso, es posible que necesite un esfuerzo para instalar dicho programa; incluso si desempaqueta manualmente el paquete de instalación, puede tropezar con dependencias insatisfechas. La instalación de dicho programa requerirá mucho esfuerzo y, en caso de error, al intentar reemplazar las bibliotecas requeridas, puede provocar un bloqueo del sistema. Afortunadamente, esta situación es extremadamente rara y el 99.9% de los usuarios de Linux nunca enfrentarán este problema. Además, todos los fabricantes conocidos de distribuciones mantienen sus repositorios con un amplio conjunto de programas, donde cada programa se compila y se prueba para una versión específica de la distribución.



Entonces, sabemos que una de las diferencias entre Linux es el formato de paquete. Sin embargo, desde el punto de vista del administrador del sistema, hay una diferencia más: el formato de los scripts de inicio. De la familia de sistemas operativos Unix, Linux tiene dos formatos competitivos: estilo System V y estilo BSD. Para entender de qué se trata, veamos cómo funciona. El gestor de arranque carga el núcleo del sistema operativo y le transfiere el control, el núcleo se inicia y se inicia el primer proceso: init. Hablando estrictamente, en lugar de init, puede deslizar cualquier proceso, por ejemplo, bash. En este caso, obtenemos algo así como un sistema de consola de usuario único y tarea única sin red ni interfaz gráfica y con un sistema de archivos raíz de solo lectura. Además, parte del hardware en este caso puede no funcionar si los controladores no están presentes en el kernel, sino que se cargan como módulos.En el modo clásico de operación, el proceso init lee el archivo / etc / inittab y, de acuerdo con él, inicia el proceso de inicio del sistema: monta particiones, carga controladores, inicializa interfaces de red, inicia programas de servicio (que anteriormente se llamaban demonios), carga el subsistema de gráficos. Init no lo hace directamente, sino que utiliza el concepto de runlevel y scripts especiales. Por lo general, hay hasta seis niveles de ejecución (los modos de ejecución que describen los modos de funcionamiento del sistema): inicio, usuario único, multiusuario con un subsistema de red, multiusuario con una interfaz gráfica. Según las condiciones de uso, el administrador puede establecer un nivel de ejecución estándar, al que el sistema cambiará después del arranque,Por lo general, es el modo multiusuario con red e interfaz gráfica para el escritorio y el modo multiusuario con red para servidores. Es en estos scripts donde reside la diferencia entre los estilos SystemV y BSD. Sin embargo, al tener conocimiento del formato inittab, puede ver el contenido de los scripts y comprender cómo funcionan el inicio, la detención y la transición entre los niveles de ejecución del sistema.



En 2010, los ingenieros de RedHat desarrollaron un reemplazo para init, el servicio systemd. Este servicio ha traído nuevas funciones al sistema:



  • servicios activados por socket ( reemplaza los complementos inetd);
  • iniciar servicios en un horario ( reemplaza los complementos cron);
  • trabajar con un temporizador de vigilancia de hardware (reemplaza a la vigilancia);
  • cambio de raíz (reemplaza a chroot);
  • volúmenes de montaje automático y recursos de red ( reemplaza a los complementos mount y fstab);
  • journalctl: servicio de registro;
  • systemd-analyse: análisis del inicio del servicio (incluye la velocidad de carga (tanto del sistema como de los servicios individuales), la prestación del inicio de los servicios, etc.);
  • systemd-boot: gestor de arranque UEFI (reemplazo de grub y lilo).


Actualmente, la gran mayoría de las distribuciones de Linux han cambiado a systemd, de las distribuciones que una vez fueron populares, solo Slackware resiste la transición al nuevo subsistema.



Por lo tanto, la transición a systemd, por así decirlo, borra una de las diferencias entre Linux: el sistema de scripts de inicio y conduce a la unificación. Al mismo tiempo, se conserva la compatibilidad con los scripts de inicio clásicos; por ejemplo, algunos volúmenes para el montaje se pueden especificar clásicamente a través de / etc / fstab, mientras que otros volúmenes se pueden montar con herramientas systemd.



En el pasado, los administradores de sistemas solían discutir qué sistema era mejor que SystemV o BSD, pero ahora el debate ha disminuido. Un administrador de sistemas con experiencia podrá configurar cualquier sistema, pero para aquellos nuevos en la Web, hay suficiente información para revelar cualquier aspecto de la configuración de Linux.



Linux desde la perspectiva del usuario



Desde el punto de vista del usuario final, Linux difiere un poco más. Echemos un vistazo más profundo a la pregunta. El subsistema gráfico era originalmente opcional en Unix. Unix a menudo se ejecutaba en computadoras potentes y los usuarios se conectaban a él a través de terminales X. La interacción tuvo lugar a través de la red: el programa se ejecutó en la computadora host, recibió información sobre las pulsaciones del teclado y los eventos del mouse, y en respuesta envió comandos al terminal para dibujar primitivas gráficas y texto. Los terminales gráficos eran dispositivos caros y raros, por lo que las computadoras personales se hicieron populares como terminales. Por cierto, aquí hay un punto interesante que a menudo causa confusión: el servidor X se ejecuta en el terminal, no en el host. El programa en sí se ejecuta en el host, que usa la biblioteca xlib,proporcionando una interfaz básica de bajo nivel para trabajar con un servidor de gráficos. Esta interfaz es de nivel bastante bajo, introduce el concepto de una ventana, es decir área rectangular de la pantalla, puede mostrar texto vectorial en varias fuentes y también proporciona dibujos de varias primitivas gráficas: puntos, líneas, rectángulos, círculos e imágenes.



Dado que las primitivas gráficas básicas son bastante simples, esto ha llevado a la aparición de bibliotecas de widgets: estas bibliotecas proporcionan un mayor nivel de abstracción y simplifican enormemente los programas de escritura con una interfaz gráfica. Por ejemplo, la biblioteca X Athena Widgets se convirtió en parte del sistema gráfico del sistema X Window. Esta biblioteca presenta el concepto de botones, botones de radio, menús, campos de entrada y primitivas similares. Sin embargo, según los estándares modernos, se ve bastante "retorcido".



Y aquí es donde comienzan las diferencias para los usuarios. La apariencia de lo que el usuario ve en la pantalla depende de varios subsistemas: es el entorno de escritorio que proporciona un espacio llamado escritorio, es un administrador de ventanas que determina la apariencia de las ventanas del programa (decoraciones de ventanas) y, a menudo, pero no necesariamente, integrado en el entorno de escritorio, y finalmente, es una biblioteca de elementos de interfaz. Lo que y cómo ve el usuario en la pantalla está determinado por las combinaciones de los componentes anteriores.



En la práctica, esto lleva al hecho de que el mismo programa lanzado en diferentes administradores de ventanas puede tener diferentes decoraciones de ventana: diferentes títulos, tamaños de borde de ventana, minimización diferente, pantalla completa y botones de cierre. El administrador de ventanas define todo esto. Sin embargo, dentro de un administrador de una sola ventana, diferentes programas pueden tener diferentes tipos de elementos de interfaz, dependiendo de la biblioteca utilizada. En aras de la equidad, debe tenerse en cuenta que se puede observar una variedad similar en Windows, pero con mucha menos frecuencia, ya que la gran mayoría de los programas de Windows utilizan GDI + estándar o se envuelven alrededor.



¿Qué enfrentará el usuario de Linux en el escritorio? En primer lugar, es GNOME o KDE, la mayoría de las distribuciones se basan en estos entornos de escritorio. Sin embargo, no están limitados y varios proveedores de Linux ofrecen alrededor de una docena de entornos diferentes. En cuanto a las bibliotecas de elementos de interfaz, dos bibliotecas están a la cabeza aquí: GTK y Qt. Ambas bibliotecas son multiplataforma, y ​​si existe algún programa tanto en Linux como en Windows, lo más probable es que esté escrito usando GTK o Qt. Sin embargo, hay excepciones, por ejemplo, Xamarin ha creado una versión de la Biblioteca de formularios Windows Forms para Linux y macOS. También a veces los desarrolladores de gestores de ventanas distribuyen sus bibliotecas de widgets. Por lo tanto, queda claro de dónde proviene una variedad de interfaces gráficas de usuario para Linux.



Linux desde el punto de vista de los programadores de aplicaciones



Todo lo anterior se aplica también a la programación. Si está escribiendo un servidor o una utilidad de consola, en la gran mayoría de los casos no necesita usar directivas de compilación condicional: Linux moderno está bastante bien estandarizado y es totalmente compatible con POSIX. Además, el uso de autoconf le permite escribir programas no solo para Linux, sino también para cualquier sistema compatible con POSIX, desde BSD hasta todo tipo de exóticos.



Probablemente no tenga que elegir un formato de paquete: use DEB y RPM y cubrirá casi todos los casos de uso. Para los programas de servicio, probablemente tenga que prestar atención al formato de los scripts de inicio para que el instalador registre correctamente el inicio automático de su servicio. En mi caso, tuve que prestar atención a la ubicación de las fuentes, ya que diferentes proveedores usan diferentes rutas para almacenar fuentes, sin embargo, una búsqueda recursiva que comience con / usr / share / fonts lo ayudará aquí: todas las fuentes, excepto las personalizadas, se ubicarán a lo largo de esta ruta. En cuanto a las fuentes personalizadas que se instalan en / home / user, existe cierta confusión y dudas, y diferentes proveedores ofrecen al menos dos jerarquías: ~ / .fonts y ~ / .local / share / fonts.



Para los programas gráficos, la complejidad es algo mayor. En vista de los diferentes entornos de escritorio del zoológico, debe tener en cuenta sus particularidades. Por ejemplo, la mayoría de los entornos de escritorio admitirán las llamadas notificaciones de escritorio, pero es posible que no funcionen con algunos administradores de ventanas exóticos.



Finalmente, algunos puntos más importantes que hacen diferencias significativas entre las distribuciones. A pesar de la similitud de todos los Linux modernos, puede encontrar problemas en las distribuciones con mayor protección, es decir. aquellos donde se usa el sistema de acceso obligatorio. Por ejemplo, algunos recursos están disponibles de forma predeterminada en todas las distribuciones clásicas, pero provocarán un error de acceso en la versión protegida de Linux. Es imposible predecir de antemano dónde y cómo fallará el programa en este caso, por lo que la única solución es probar las distribuciones protegidas. O una solución rápida del problema después de que el usuario se haya puesto en contacto con el soporte técnico.



El segundo punto es la popularidad de la distribución. Si utiliza alguna biblioteca o marco no muy común como parte del producto, entonces es posible que dicha distribución contenga una versión antigua o incompleta de esta biblioteca. En mi práctica, esta situación ocurrió en una de las distribuciones con soporte para la página de códigos 1251 en la biblioteca System.Text.Encoding para C #. Solo hay una forma de lidiar con tales problemas: dado que el problema no se observa en otras distribuciones de Linux, debe escribir al soporte técnico para el desarrollador de esta distribución, describiendo el problema en detalle y decir que no hay problema en otras distribuciones.



Salida. Si no considera las versiones protegidas de Linux, desde el punto de vista de los administradores y programadores del sistema, las distribuciones modernas son muy similares. A menudo, las diferencias entre las diferentes generaciones de una distribución del mismo proveedor son más significativas que las diferencias entre las distribuciones modernas. Desde el punto de vista de los usuarios, la principal diferencia está en la elección y configuración del entorno de escritorio y el software suministrado con la distribución.



All Articles