| .. include:: ../disclaimer-sp.rst |
| |
| :Translator: Sergio González Collado <sergio.collado@gmail.com> |
| |
| .. _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 |
| <https://lore.kernel.org/regressions/>`_ (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 <some.human@example.com> |
| #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 <development_posting>`. |
| |
| #. 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 |
| <https://lore.kernel.org/regressions/>`_ (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 <some.human@example.com> |
| #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 <development_posting>`, 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 <https://linux-regtracking.leemhuis.info/regzbot/>`_ |
| para ver la última información; o `busque el último informe de regresiones |
| <https://lore.kernel.org/lkml/?q=%22Linux+regressions+report%22+f%3Aregzbot>`_, |
| 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 <version or commit>``, 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 <version or commit>`` |
| 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 <https://gitlab.com/knurd42/regzbot>`_, |
| y entre otros contiene una `guia de inicio <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/getting_started.md>`_ |
| y `documentación de referencia <https://gitlab.com/knurd42/regzbot/-/blob/main/docs/reference.md>`_ |
| 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) |
| <https://lore.kernel.org/lkml/CA+55aFwiiQYJ+YoLKCXjN_beDVfu38mg=Ggg5LFOcqHE8Qi7Zw@mail.gmail.com/>`_:: |
| |
| 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) |
| <https://lore.kernel.org/lkml/CA+55aFxW7NMAMvYhkvz1UPbUTUJewRt6Yb51QAx5RtrWOwjebg@mail.gmail.com/>`_:: |
| |
| 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/<pid>/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 |
| <https://lore.kernel.org/all/CAHk-=wiVi7mSrsMP=fLXQrXK_UimybW=ziLOwSzFTtoXUacWVQ@mail.gmail.com/>`_:: |
| |
| 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 |
| <https://lore.kernel.org/all/CA+55aFzUvbGjD8nQ-+3oiMBx14c_6zOj2n7KLN3UsJ-qsd4Dcw@mail.gmail.com/>`_:: |
| |
| 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 |
| <https://lore.kernel.org/all/CA+55aFwWZX=CXmWDTkDGb36kf12XmTehmQjbiMPCqCRG2hi9kw@mail.gmail.com/>`_:: |
| |
| 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 |
| <https://lore.kernel.org/all/CAHk-=wiUVqHN76YUwhkjZzwTdjMMJf_zN4+u7vEJjmEGh3recw@mail.gmail.com/>`_:: |
| |
| 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) |
| <https://lore.kernel.org/all/BANLkTim9YvResB+PwRp7QTK-a5VNg2PvmQ@mail.gmail.com/>`_:: |
| |
| 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) |
| <https://lore.kernel.org/all/BANLkTi=KVXjKR82sqsz4gwjr+E0vtqCmvA@mail.gmail.com/>`_:: |
| |
| Esto claramente NO es un tracepoint interno. Por definición. Y está |
| siendo usado por powertop. |
| |
| De `2011-05-06 (3/3) |
| <https://lore.kernel.org/all/BANLkTinazaXRdGovYL7rRVp+j6HbJ7pzhg@mail.gmail.com/>`_:: |
| |
| Tenemos programas que usan esa ABI y si eso se rompe eso es una |
| regresión. |
| |
| * De `2012-07-06 <https://lore.kernel.org/all/CA+55aFwnLJ+0sjx92EGREGTWOx84wwKaraSzpTNJwPVV8edw8g@mail.gmail.com/>`_:: |
| |
| > 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 |
| <https://lore.kernel.org/lkml/CAHk-=wiP4K8DRJWsCo=20hn_6054xBamGKF2kPgUzpB5aMaofA@mail.gmail.com/>`_:: |
| |
| 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. |