.. include:: ../disclaimer-sp.rst :Translator: Sergio González Collado .. _sp_handling_regressions: Gestión de regresiones ++++++++++++++++++++++ *No causamos regresiones* -- este documento describe la que es la "primera regla del desarrollo del kernel de Linux" y que implica en la práctica para los desarrolladores. Y complementa la documentación: Documentation/admin-guide/reporting-regressions.rst, que cubre el tema desde el punto de vista de un usuario; si nunca ha leído ese texto, realice al menos una lectura rápida del mismo antes de continuar. Las partes importantes (el "TL;DR") =================================== #. Asegúrese de que los suscriptores a la lista `regression mailing list `_ (regressions@lists.linux.dev) son conocedores con rapidez de cualquier nuevo informe de regresión: * Cuando se reciba un correo que no incluyó a la lista, inclúyalo en la conversación de los correos, mandando un breve "Reply-all" con la lista en CCed. * Mande o redirija cualquier informe originado en los gestores de bugs a la lista. #. Haga que el bot del kernel de Linux "regzbot" realice el seguimiento del incidente (esto es opcional, pero recomendado). * Para reportes enviados por correo, verificar si contiene alguna línea como ``#regzbot introduced v5.13..v5.14-rc1``. Si no, mandar una respuesta (con la lista de regresiones en CC) que contenga un párrafo como el siguiente, lo que le indica a regzbot cuando empezó a suceder el incidente:: #regzbot ^introduced 1f2e3d4c5b6a * Cuando se mandan informes desde un gestor de incidentes a la lista de regresiones(ver más arriba), incluir un párrafo como el siguiente:: #regzbot introduced: v5.13..v5.14-rc1 #regzbot from: Some N. Ice Human #regzbot monitor: http://some.bugtracker.example.com/ticket?id=123456789 #. Cuando se manden correcciones para las regresiones, añadir etiquetas "Link:" a la descripción, apuntado a todos los sitios donde se informó del incidente, como se indica en el documento: Documentation/process/submitting-patches.rst y :ref:`Documentation/process/5.Posting.rst `. #. Intente arreglar las regresiones rápidamente una vez la causa haya sido identificada; las correcciones para la mayor parte de las regresiones deberían ser integradas en menos de dos semanas, pero algunas pueden resolverse en dos o tres días. Detalles importantes para desarrolladores en la regresiones de kernel de Linux ============================================================================== Puntos básicos importantes más en detalle ----------------------------------------- Qué hacer cuando se recibe un aviso de regresión. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Asegúrese de que el programa de gestión de regresiones del kernel de Linux y los subscritos a la lista de correo `regression mailing list `_ (regressions@lists.linux.dev) son conocedores de cualquier nuevo informe de regresión: * Cuando se recibe un informe por email que no tiene en CC la lista, inmediatamente meterla en el la cadena de emails mandado al menos un breve "Reply-all" con la lista en CC; Intentar asegurar que la lista es añadida en CC de nuevo en caso de que alguna respuesta la omita de la lista. * Si un informe enviado a un gestor de defectos, llega a su correo, reenvíelo o redirijalo a la lista. Considere verificar los archivos de la lista de antemano, si la persona que lo ha informado, lo ha enviado anteriormente, como se indica en: Documentation/admin-guide/reporting-issues.rst. Cuando se realice cualquiera de las acciones anteriores, considere inmediatamente iniciar el seguimiento de la regresión con "regzbot" el gestor de regresiones del kernel de Linux. * Para los informes enviados por email, verificar si se ha incluido un comando a "regzbot", como ``#regzbot introduced 1f2e3d4c5b6a``. Si no es así, envíe una respuesta (con la lista de regresiones en CC) con un párrafo como el siguiente:: #regzbot ^introduced: v5.13..v5.14-rc1 Esto indica a regzbot el rango de versiones en el cual es defecto comenzó a suceder; Puede especificar un rango usando los identificadores de los commits así como un único commit, en caso en el que el informante haya identificado el commit causante con 'bisect'. Tenga en cuenta que el acento circunflejo (^) antes de "introduced": Esto indica a regzbot, que debe tratar el email padre (el que ha sido respondido) como el informeinicial para la regresión que quiere ser seguida. Esto es importante, ya que regzbot buscará más tarde parches con etiquetas "Link:" que apunten al al informe de losarchivos de lore.kernel.org. * Cuando mande informes de regresiones a un gestor de defectos, incluya un párrafo con los siguientes comandos a regzbot:: #regzbot introduced: 1f2e3d4c5b6a #regzbot from: Some N. Ice Human #regzbot monitor: http://some.bugtracker.example.com/ticket?id=123456789 Regzbot asociará automáticamente parches con el informe que contengan las etiquetas "Link:" apuntando a su email o el ticket indicado. Qué es importante cuando se corrigen regresiones ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ No se necesita hacer nada especial cuando se mandan las correcciones para las regresiones únicamente recordar lo que se explica en los documentos: Documentation/process/submitting-patches.rst, :ref:`Documentation/process/5.Posting.rst `, y Documentation/process/stable-kernel-rules.rst * Apunte a todos los lugares donde el incidente se reportó usando la etiqueta "Link:" :: Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/ Link: https://bugzilla.kernel.org/show_bug.cgi?id=1234567890 * Añada la etiqueta "Fixes:" para indicar el commit causante de la regresión. * Si el culpable ha sido "mergeado" en un ciclo de desarrollo anterior, marque explícitamente el fix para retro-importarlo usando la etiqueta ``Cc: stable@vger.kernel.org`` tag. Todo esto se espera y es importante en una regresión, ya que estas etiquetas son de gran valor para todos (incluido usted) que pueda estar mirando en ese incidente semanas, meses o años después. Estas etiquetas son también cruciales para las herramientas y scripts usados por otros desarrolladores del kernel o distribuciones de Linux; una de esas herramientas es regzbot, el cual depende mucho de las etiquetas "Link:" para asociar los informes por regresiones con los cambios que las resuelven. Priorización del trabajo en arreglar regresiones ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Al final, los desarrolladores deberían hacer lo posible para evitar a los usuarios situaciones donde una regresión les deje solo tres opciones: * Ejecutar el kernel con una regresión que afecta seriamente al uso. * Cambiar a un kernel nuevo o mas antiguo -- rebajarse a una versión soportada del kernel que no tenga las funcionalidades requeridas. * Continuar ejecutando una versión desfasada y potencialmente insegura del kernel por más de dos semanas después de que el causante de una regresión fuese identificado. Cómo se ejecuta esto depende mucho de la situación. A continuación se presentan unas reglas generales, en orden de importancia: * Priorice el trabajo en la gestión de los informes de la regresión y arreglar la regresión por encima de cualquier otro trabajo en el kernel de Linux, a menos que lo último afecte profundamente a efectos de seguridad, o cause errores en los que haya pérdida o daño de datos. * Considere siempre revertir los commits responsables y re-aplicarlos después, junto con las correcciones necesarias, ya que esto puede la forma menos peligrosa y más rápida de arreglar la regresión. * Los desarrolladores deberían gestionar la regresión en todos los kernels soportados de la serie, pero son libres de delegar el trabajo al equipo permanente el incidente no hubiese ocurrido en la línea principal. * Intente resolver cualquier regresión que apareciera en el ciclo de desarrollo antes de que este acabe. Si se teme que una corrección pudiera ser demasiado arriesgada para aplicarla días antes de una liberación de la línea principal de desarrollo, dejar decidir a Linus: mande la corrección a él de forma separada, tan pronto como sea posible con una explicación de la situación. El podrá decidir, y posponer la liberación si fuese necesario, por ejemplo si aparecieran múltiples cambios como ese. * Gestione las regresiones en la rama estable, de largo término, o la propia rama principal de las versiones, con más urgencia que la regresiones en las preliberaciones. Esto cambia después de la liberación de la quinta pre-liberación, aka "-rc5": la rama principal entonces se vuelve más importante, asegurar que todas las mejoras y correcciones son idealmente testeados juntos por al menos una semana antes de que Linux libere la nueva versión en la rama principal. * Intente arreglar regresiones en un intervalo de una semana después de que se ha identificado el responsable, si el incidente fue introducido en alguno de los siguientes casos: * una versión estable/largo-plazo reciente * en el último ciclo de desarrollo de la rama principal En el último caso (por ejemplo v5.14), intentar gestionar las regresiones incluso más rápido, si la versión estable precedente (v5.13) ha de ser abandonada pronto o ya se ha etiquetado como de final de vida (EOL de las siglas en inglés End-of-Life) -- esto sucede usualmente sobre tres o cuatro semanas después de una liberación de una versión en la rama principal. * Intente arreglar cualquier otra regresión en un periodo de dos semanas después de que el culpable haya sido identificado. Dos o tres semanas adicionales son aceptables para regresiones de rendimiento y otros incidentes que son molestos, pero no bloquean a nadie la ejecución de Linux (a menos que se un incidente en el ciclo de desarrollo actual, en ese caso se debería gestionar antes de la liberación de la versión). Unas semanas son aceptables si la regresión únicamente puede ser arreglada con un cambio arriesgado y al mismo tiempo únicamente afecta a unos pocos usuarios; también está bien si se usa tanto tiempo como fuera necesario si la regresión está presente en la segunda versión más nueva de largo plazo del kernel. Nota: Los intervalos de tiempo mencionados anteriormente para la resolución de las regresiones, incluyen la verificación de esta, revisión e inclusión en la rama principal, idealmente con la corrección incluida en la rama "linux-next" al menos brevemente. Esto conllevará retrasos que también se tienen tener en cuenta. Se espera que los maintainers de los subsistemas, ayuden en conseguir esos tiempos, haciendo revisiones con prontitud y gestionando con rapidez los parches aceptados. Esto puede resultar en tener que mandar peticiones de git-pull antes o de forma más frecuente que lo normal; dependiendo del arreglo, podría incluso ser aceptable saltarse la verificación en linux-next. Especialmente para las correcciones en las ramas de los kernels estable y de largo plazo necesitan ser gestionadas rápidamente, y las correcciones necesitan ser incluidas en la rama principal antes de que puedan ser incluidas posteriormente a las series precedentes. Más aspectos sobre regresiones que los desarrolladores deben saber ------------------------------------------------------------------ Cómo tratar con cambios donde se sabe que hay riesgo de regresión ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Evalué cómo de grande es el riesgo de una regresión, por ejemplo realizando una búsqueda en las distribuciones de linux y en Git forges. Considere también preguntar a otros desarrolladores o proyectos que pudieran ser afectados para evaluar o incluso testear el cambio propuesto; si apareciesen problemas, quizás se pudiera encontrar una solución aceptable para todos. Si al final, el riesgo de la regresión parece ser relativamente pequeño, entonces adelante con el cambio, pero siempre informe a todas las partes involucradas del posible riesgo. Por tanto, asegúrese de que la descripción del parche, se hace explícito este hecho. Una vez el cambio ha sido integrado, informe al gestor de regresiones de Linux y a las listas de correo de regresiones sobre el riesgo, de manera que cualquiera que tenga el cambio en el radar, en el caso de que aparezcan reportes. Dependiendo del riesgo, quizás se quiera preguntar al mantenedor del subsistema, que mencione el hecho en su línea principal de desarrollo. ¿Qué más hay que saber sobre regresiones? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Repase la documentación: Documentation/admin-guide/reporting-regressions.rst, esta cubre otros aspectos a tener a en cuenta y conocer: * la finalidad de la "regla de no regresión" * qué incidencias no se califican como regresión * quién es el responsable de identificar la causa raíz de una regresión * cómo gestionar situaciones difíciles, como por ejemplo cuando una regresión es causada por una corrección de seguridad o cuando una regresión causa otra regresión A quién preguntar por consejo cuando se trata de regresiones ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mande un email a la lista de correo de regresiones (regressions@lists.linux.dev) y CC al seguidor de regresiones del kernel de Linux (regressions@leemhuis.info); Si el incidente pudiera ser mejor gestionarlo en privado, puede omitirse la lista. Más sobre la gestión de regresiones con regzbot ----------------------------------------------- ¿Por qué el kernel de Linux tiene un gestor de regresiones, y por qué se usa regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Reglas como "no regresiones" necesitan asegurar que se cumplen, de otro modo se romperían accidentalmente o a propósito. La historia ha mostrado que esto es verdad también para el kernel de Linux. Esto es por lo que Thorsten Leemhuis se ofreció como voluntario para dar una solución a esto, con el gestor de regresiones del kernel de Linux. A nadie se le paga por hacer esto, y esa es la razón por la gestión de regresiones es un servicio con el "mejor esfuerzo". Intentos iniciales de gestionar manualmente las regresiones han demostrado que es una tarea extenuante y frustrante, y por esa razón se dejaron de hacer después de un tiempo. Para evitar que volviese a suceder esto, Thorsten desarrollo regbot para facilitar el trabajo, con el objetivo a largo plazo de automatizar la gestión de regresiones tanto como fuese posible para cualquiera que estuviese involucrado. ¿Cómo funciona el seguimiento de regresiones con regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ El bot monitoriza las respuestas de los informes de las regresiones identificadas. Adicionalmente mira si se han publicado o enviado parches que hagan referencia a esos informes con la etiqueta: "Link:"; respuestas a esos parches también se siguen. Combinando esta información, también proporciona una buena imagen del estado actual del proceso de corrección. Regzbot intenta hacer todo este trabajo con tan poco retraso como sea posible tanto para la gente que lo reporta, como para los desarrolladores. De hecho, solo los informantes son requeridos para una tarea adicional: necesitan informar a regzbot con el comando ``#regzbot introduced`` indicado anteriormente; si no hacen esto, alguien más puede hacerlo usando ``#regzbot ^introduced``. Para los desarrolladores normalmente no hay un trabajo adicional que realizar, únicamente necesitan asegurarse una cosa, que ya se hacía mucho antes de que regzbot apareciera: añadir las etiquetas "Link:" a la descripción del parche apuntando a todos los informes sobre el error corregido. ¿Tengo que usar regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~ Hacerlo es por el bien de todo el mundo, tanto los mantenedores del kernel, como Linus Torvalds dependen parcialmente en regzbot para seguir su trabajo -- por ejemplo cuando deciden liberar una nueva versión o ampliar la fase de desarrollo. Para esto necesitan conocer todas las regresiones que están sin corregir; para esto, es conocido que Linux mira los informes semanales que manda regzbot. ¿He de informar a regzbot cada regresión que encuentre? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Idealmente, sí: todos somos humanos y olvidamos fácilmente los problemas cuando algo más importante aparece inesperadamente -- por ejemplo un problema mayor en el kernel de Linux o algo en la vida real que nos mantenga alejados de los teclados por un tiempo. Por eso es mejor informar a regzbot sobre cada regresión, excepto cuando inmediatamente escribimos un parche y los mandamos al árbol de desarrollo en el que se integran habitualmente a la serie del kernel. ¿Cómo ver qué regresiones esta siguiendo regbot actualmente? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Verifique el `interfaz web de regzbot `_ para ver la última información; o `busque el último informe de regresiones `_, el cual suele ser enviado por regzbot una vez a la semana el domingo por la noche (UTC), lo cual es unas horas antes de que Linus normalmente anuncie las "(pre-)releases". ¿Qué sitios supervisa regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Regzbot supervisa las listas de correo más importantes de Linux, como también las de los repositorios linux-next, mainline y stable/longterm. ¿Qué tipos de incidentes han de ser monitorizados por regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ El bot debe hacer seguimiento de las regresiones, y por tanto por favor, no involucre a regzbot para incidencias normales. Pero es correcto para el gestor de incidencias de kernel de Linux, monitorizar incidentes graves, como informes sobre cuelgues, corrupción de datos o errores internos (Panic, Oops, BUG(), warning, ...). ¿Puedo añadir una regresión detectada por un sistema de CI al seguimiento de regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Siéntase libre de hacerlo, si la regresión en concreto puede tener un impacto en casos de uso prácticos y por tanto ser detectado por los usuarios; Así, por favor no involucre a regzbot en regresiones teóricas que difícilmente pudieran manifestarse en un uso real. ¿Cómo interactuar con regzbot? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Usando el comando 'regzbot' en una respuesta directa o indirecta al correo con el informe de regresión. Ese comando necesita estar en su propio párrafo (debe estar separado del resto del texto usando líneas en blanco): Por ejemplo ``#regzbot introduced ``, que hace que regzbot considere el correo como un informe de regressión que se ha de añadir al seguimiento, como se ha descrito anteriormente; ``#regzbot ^introduced `` es otro ejemplo del comando, el cual indica a regzbot que considere el email anterior como el informe de una regresión que se ha de comenzar a monitorizar. Una vez uno de esos dos comandos se ha utilizado, se pueden usar otros comandos regzbot en respuestas directas o indirectas al informe. Puede escribirlos debajo de uno de los comandos anteriormente usados o en las respuestas al correo en el que se uso como respuesta a ese correo: * Definir o actualizar el título:: #regzbot title: foo * Monitorizar una discusión o un tiquet de bugzilla.kernel.org donde aspectos adicionales del incidente o de la corrección se están comentando -- por ejemplo presentar un parche que corrige la regresión:: #regzbot monitor: https://lore.kernel.org/all/30th.anniversary.repost@klaava.Helsinki.FI/ Monitorizar solamente funciona para lore.kernel.org y bugzilla.kernel.org; regzbot considerará todos los mensajes en ese hilo o el tiquet como relacionados al proceso de corrección. * Indicar a un lugar donde más detalles de interés, como un mensaje en una lista de correo o un tiquet en un gestor de incidencias que pueden estar levemente relacionados, pero con un tema diferente:: #regzbot link: https://bugzilla.kernel.org/show_bug.cgi?id=123456789 * Identificar una regresión como corregida por un commit que se ha mandado aguas arriba o se ha publicado:: #regzbot fixed-by: 1f2e3d4c5d * Identificar una regresión como un duplicado de otra que ya es seguida por regzbot:: #regzbot dup-of: https://lore.kernel.org/all/30th.anniversary.repost@klaava.Helsinki.FI/ * Identificar una regresión como inválida:: #regzbot invalid: wasn't a regression, problem has always existed ¿Algo más que decir sobre regzbot y sus comandos? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Hay información más detallada y actualizada sobre el bot de seguimiento de regresiones del kernel de Linux en: `project page `_, y entre otros contiene una `guia de inicio `_ y `documentación de referencia `_ Ambos contienen más detalles que las secciones anteriores. Citas de Linus sobre regresiones -------------------------------- A continuación se encuentran unos ejemplos reales (traducidos) de como Linus Torvalds espera que se gestionen las regresiones: * De 2017-10-26 (1/2) `_:: Si rompes la configuración de los espacios de usuario ESO ES UNA REGRESIÓN. No está bien decir "pero nosotros arreglaremos la configuración del espacio de usuario". Realmente. NO ESTÁ BIEN. [...] La primera regla es: - no causamos regresiones y el corolario es que cuando una regresión pasa, lo admitimos y lo arreglamos, en vez de echar la culpa al espacio de usuario. El hecho de que aparentemente se haya negado la regresión durante tres semanas, significa que lo revertiré y dejaré de integrar peticiones de apparmor hasta que la gente involucrada entienda como se hace el desarrollo del kernel. * De `2017-10-26 (2/2) `_:: La gente debería sentirse libre de actualizar su kernel y simplemente no preocuparse por ello. Me niego a imponer una limitación del tipo "solo puede actualizar el kernel si actualiza otro programa". Si el kernel trabaja para tí, la regla es que continúe trabajando para tí. Ha habido algunas excepciones, pero son pocas y separadas entre sí, y generalmente tienen una razón fundamental para haber sucedido, que era básicamente inevitable, y la gente intentó evitarlas por todos los medios. Quizás no podamos mantener el hardware más, después de que han pasado décadas y nadie los usacon kernel modernos. Quizás haya un problema de seguridad serio con cómo hicimos las cosas, y la gente depende de un modelo fundamentalmente roto. Quizás haya algún otro roto fundamental, que tenga que tener una _flag_ y por razones internas y fundamentales. Y nótese que esto trata sobre *romper* los entornos de la gente. Cambios de comportamiento pasan, y quizás no se mantengan algunas funcionalidades más. Hay un número de campos en /proc//stat que se imprimen como ceros, simplemente porque ni siquiera existen ya en kernel, o porque mostrarlos era un error (típica una fuga de información). Pero los números se sustituyeron por ceros, así que el código que se usaba para parsear esos campos todavía existe. El usuario puede no ver todo lo que podía ver antes, y por eso el omportamiento es claramente diferente, pero las cosas todavía _funcionan_, incluso si no se puede mostrar información sensible (o que no es ya importante). Pero si algo realmente se rompe, entonces el cambio debe de arreglarse o revertirse. Y se arregla en el *kernel*. No diciendo "bueno, arreglaremos tu espacio de usuario". Ha sido un cambio en el kernel el que creo el problema, entonces ha de ser el kernel el que lo corrija, porque tenemos un modelo de "actualización". Pero no tenemos una "actualización con el nuevo espacio de usuario". Y yo seriamente me negaré a coger código de gente que no entiende y honre esta sencilla regla. Y esta regla no va a cambiar. Y sí, me doy cuenta que el kernel es "especial" en este respecto. Y estoy orgulloso de ello. Y he visto, y puedo señalar, muchos proyectos que dicen "Tenemos que romper ese caso de uso para poder hacer progresos" o "estabas basandote en comportamientos no documentados, debe ser duro ser tú" o "hay una forma mejor de hacer lo que quieres hacer, y tienes que cambiar a esa nueva forma", y yo simplemente no pienso que eso sea aceptable fuera de una fase alfa muy temprana que tenga usuarios experimentales que saben a lo que se han apuntado. El kernel no ha estado en esta situación en las dos últimas décadas. Nosotros rompemos la API _dentro_ del kernel todo el tiempo. Y arreglaremos los problemas internos diciendo "tú ahora necesitas hacer XYZ", pero entonces es sobre la API interna del kernel y la gente que hace esto entonces tendrá obviamente que arreglar todos los usos de esa API del kernel. Nadie puede decir "ahora, yo he roto la API que usas, y ahora tú necesitas arreglarlo". Quién rompa algo, lo arregla también. Y nosotros, simplemente, no rompemos el espacio de usuario. * De `2020-05-21 `_:: Las reglas sobre regresiones nunca han sido sobre ningún tipo de comportamiento documentado, o dónde está situado el código. Las reglas sobre regresiones son siempre sobre "roturas en el flujo de trabajo del usuario". Los usuarios son literalmente la _única_ cosa que importa. Argumentaciones como "no debería haber usado esto" o "ese comportamiento es indefinido, es su culpa que su aplicación no funcione" o "eso solía funcionar únicamente por un bug del kernel" son irrelevantes. Ahora, la realidad nunca es blanca o negra. Así hemos tenido situaciones como "un serio incidente de seguridad" etc que solamente nos fuerza a hacer cambios que pueden romper el espacio de usuario. Pero incluso entonces la regla es que realmente no hay otras opciones para que las cosas sigan funcionando. Y obviamente, si los usuarios tardan años en darse cuenta que algo se ha roto, o si hay formas adecuadas para sortear la rotura que no causen muchos problemas para los usuarios (por ejemplo: "hay un puñado de usuarios, y estos pueden usar la línea de comandos del kernel para evitarlos"; ese tipo de casos), en esos casos se ha sido un poco menos estricto. Pero no, "eso que está documentado que está roto" (si es dado a que el código estaba en preparación o porque el manual dice otra cosa) eso es irrelevante. Si preparar el código es tan útil que la gente, acaba usando, esto implica que básicamente es código del kernel con una señal diciendo "por favor limpiar esto". El otro lado de la moneda es que la gente que habla sobre "estabilidad de las APIs" están totalmente equivocados. Las APIs tampoco importan. Se puede hacer cualquier cambio que se quiera a una API ... siempre y cuando nadie se de cuenta. De nuevo, la regla de las regresiones no trata sobre la documentación, tampoco sobre las APIs y tampoco sobre las fases de la Luna. Únicamente trata sobre "hemos causado problemas al espacio de usuario que antes funcionaba". * De `2017-11-05 `_:: Y nuestra regla sobre las regresiones nunca ha sido "el comportamiento no cambia". Eso podría significar que nunca podríamos hacer ningún cambio. Por ejemplo, hacemos cosas como añadir una nueva gestión de errores etc todo el tiempo, con lo cual a veces incluso añadimos tests en el directorio de kselftest. Así que claramente cambia el comportamiento todo el tiempo y nosotros no consideramos eso una regresión per se. La regla para regresiones para el kernel es para cuando se rompe algo en el espacio de usuario. No en algún test. No en "mira, antes podía hacer X, y ahora no puedo". * De `2018-08-03 `_:: ESTÁS OLVIDANDO LA REGLA #1 DEL KERNEL. No hacemos regresiones, y no hacemos regresiones porque estás 100% equivocado. Y la razón que apuntas en tú opinión es exactamente *PORQUÉ* estás equivocado. Tus "buenas razones" son honradas y pura basura. El punto de "no hacemos regresiones" es para que la gente pueda actualizar el kernel y nunca tengan que preocuparse por ello. > El kernel tiene un bug que ha de ser arreglado Eso es *TOTALMENTE* insustancial. Chicos, si algo estaba roto o no, NO IMPORTA. ¿Porqué? Los errores pasan. Eso es un hecho de la vida. Discutir que "tenemos que romper algo porque estábamos arreglando un error" es una locura. Arreglamos decenas de errores cada dia, pensando que "arreglando un bug" significa que podemos romper otra cosa es algo que simplemente NO ES VERDAD. Así que los bugs no son realmente relevantes para la discusión. Estos suceden y se detectan, se arreglan, y no tienen nada que ver con "rompemos a los usuarios". Porque la única cosa que importa ES EL USUARIO. ¿Cómo de complicado es eso de comprender? Cualquier persona que use "pero no funcionaba correctamente" es un argumento no tiene la razón. Con respecto al USUARIO, no era erróneo - funcionaba para él/ella. Quizás funcionaba *porque* el usuario había tenido el bug en cuenta, y quizás funcionaba porque el usuario no lo había notado - de nuevo no importa. Funcionaba para el usuario. Romper el flujo del trabajo de un usuario, debido a un "bug" es la PEOR razón que se pueda usar. Es básicamente decir "He cogido algo que funcionaba, y lo he roto, pero ahora es mejor". ¿No ves que un argumento como este es j*didamente absurdo? y sin usuarios, tu programa no es un programa, es una pieza de código sin finalidad que puedes perfectamente tirar a la basura. Seriamente. Esto es *porque* la regla #1 para el desarrollo del kernel es "no rompemos el espacio de usuario". Porque "He arreglado un error" PARA NADA ES UN ARGUMENTO si esa corrección del código rompe el espacio de usuario. si actualizamos el kernel TODO EL TIEMPO, sin actualizar ningún otro programa en absoluto. Y esto es absolutamente necesario, porque las dependencias son terribles. Y esto es necesario simplemente porque yo como desarrollador del kernel no actualizo al azar otras herramientas que ni siquiera me importan como desarrollador del kernel, y yo quiero que mis usuarios se sientan a salvo haciendo lo mismo. Así que no. Tu regla está COMPLETAMENTE equivocada. Si no puedes actualizar el kernel sin actualizar otro binario al azar, entonces tenemos un problema. * De `2021-06-05 `_:: NO HAY ARGUMENTOS VÁLIDOS PARA UNA REGRESIÓN. Honestamente, la gente de seguridad necesita entender que "no funciona" no es un caso de éxito sobre seguridad. Es un caso de fallo. Sí, "no funciona" puede ser seguro. Pero en este caso es totalmente inutil. * De `2011-05-06 (1/3) `_:: La compatibilidad de los binarios es más importante. Y si los binarios no usan el interfaz para parsear el formato (o justamente lo parsea incorrectamente - como el reciente ejemplo de añadir uuid al /proc/self/mountinfo), entonces es una regresión. Y las regresiones se revierten, a menos que haya problemas de seguridad o similares que nos hagan decir "Dios mío, realmente tenemos que romper las cosas". No entiendo porqué esta simple lógica es tan difícil para algunos desarrolladores del kernel. La realidad importa. Sus deseos personales NO IMPORTAN NADA. Si se crea un interface que puede usarse sin parsear la descripción del interface, entonces estaḿos atascados en el interface. La teoría simplemente no importa. Podrias alludar a arreglar las herramientas, e intentar evitar los errores de compatibilidad de ese modo. No hay tampoco tantos de esos. De `2011-05-06 (2/3) `_:: Esto claramente NO es un tracepoint interno. Por definición. Y está siendo usado por powertop. De `2011-05-06 (3/3) `_:: Tenemos programas que usan esa ABI y si eso se rompe eso es una regresión. * De `2012-07-06 `_:: > Ahora esto me ha dejado preguntandome si Debian _inestable_ realmente califica > como espacio de usuario estándar. Oh, si el kernel rompe algún espacio de usuario estándar, eso cuenta. Muchísima gente usa Debian inestable. * De `2019-09-15 `_:: Una reversión _en particular_ en el último minuto en el último commit (no teniendo en cuenta el propio cambio de versión) justo antes de la liberación, y aunque es bastante incómodo, quizás también es instructivo. Lo que es instructivo sobre esto es que he revertido un commit que no tenía ningún error. De hecho, hacía exactamente lo que pretendía, y lo hacía muy bien. De hecho lo hacía _tan_ bien que los muy mejorados patrones de IO que causaba han acabado revelando una regresión observable desde el espacio de usuario, debido a un error real en un componente no relacionado en absoluto. De todas maneras, los detalles actuales de esta regresión no son la razón por la que señalo esto como instructivo. Es más que es un ejemplo ilustrativo sobre lo que cuenta como una regresión, y lo que conlleva la regla del kernel de "no regresiones". El commit que ha sido revertido no cambiaba ninguna API, y no introducía ningún error nuevo en el código. Pero acabó exponiendo otro problema, y como eso causaba que la actualización del kernel fallara para el usuario. Así que ha sido revertido. El foco aquí, es que hemos hecho la reversión basándonos en el comportamiento reportado en el espacio de usuario, no basado en conceptos como "cambios de ABI" o "provocaba un error". Los mejores patrones de IO que se han presentado debido al cambio únicamente han expuesto un viejo error, y la gente ya dependía del benigno comportamiento de ese viejo error. Y que no haya miedo, reintroduciremos el arreglo que mejoraba los patrones de IO una vez hayamos decidido cómo gestionar el hecho de que hay una interacción incorrecta con un interfaz en el que la gente dependía de ese comportamiento previo. Es únicamente que tenemos que ver cómo gestionamos y cómo lo hacemos (no hay menos de tres parches diferentes de tres desarrolladores distintos que estamos evaluando, ... puede haber más por llegar). Mientras tanto, he revertido lo que exponía el problema a los usuarios de esta release, incluso cuando espero que el fix será reintroducido (quizás insertado a posteriormente como un parche estable) una vez lleguemos a un acuerdo sobre cómo se ha de exponer el error. Lo que hay que recordar de todo el asunto no es sobre si el cambio de kernel-espacio-de-usuario ABI, o la corrección de un error, o si el código antiguo "en primer lugar nunca debería haber estado ahí". Es sobre si algo rompe el actual flujo de trabajo del usuario. De todas formas, esto era mi pequeña aclaración en todo este tema de la regresión. Ya que es la "primera regla de la programación del kernel", me ha parecido que quizás es bueno mencionarlo de vez en cuando.