mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
docs/sp_SP: Add translation of process/2.Process.rst
Translate Documentation/process/2.Process.rst into Spanish Signed-off-by: Avadhut Naik <avadhut.naik@amd.com> Reviewed-by: Carlos Bilbao <carlos.bilbao@amd.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Link: https://lore.kernel.org/r/20240305221839.2764380-5-avadhut.naik@amd.com
This commit is contained in:
parent
169e54c2d7
commit
3dfa8cd96e
@ -1,11 +1,542 @@
|
||||
.. include:: ../disclaimer-sp.rst
|
||||
|
||||
:Original: Documentation/process/2.Process.rst
|
||||
:Translator: Avadhut Naik <avadhut.naik@amd.com>
|
||||
|
||||
.. _sp_development_process:
|
||||
|
||||
Cómo funciona el proceso de desarrollo
|
||||
======================================
|
||||
|
||||
.. warning::
|
||||
TODO aún no traducido
|
||||
El desarrollo del kernel de Linux a principios de la década de 1990 fue
|
||||
un asunto relajado, con un número relativamente pequeño de usuarios y
|
||||
desarrolladores involucrados. Con una base de usuarios en los millones y
|
||||
alrededor de 2,000 desarrolladores involucrados durante un año, el kernel
|
||||
ha tenido que adaptar varios procesos para mantener el desarrollo sin
|
||||
problemas. Se requiere una comprensión solida de cómo funciona el proceso
|
||||
para ser una parte efectiva del mismo.
|
||||
|
||||
El panorama general
|
||||
-------------------
|
||||
|
||||
Los desarrolladores del kernel utilizan un proceso de lanzamiento basado
|
||||
en el tiempo de manera flexible, con uno nuevo lanzamiento principal del
|
||||
kernel ocurriendo cada dos o tres meses. El historial reciente de
|
||||
lanzamientos se ve así:
|
||||
|
||||
====== ==================
|
||||
5.0 Marzo 3, 2019
|
||||
5.1 Mayo 5, 2019
|
||||
5.2 Julio 7, 2019
|
||||
5.3 Septiembre 15, 2019
|
||||
5.4 Noviembre 24, 2019
|
||||
5.5 Enero 6, 2020
|
||||
====== ==================
|
||||
|
||||
Cada lanzamiento 5.x es un lanzamiento principal del kernel con nuevas
|
||||
características, cambios internos en la API y más. Un lanzamiento típico
|
||||
puede contener alrededor de 13,000 conjuntos de cambios incluyendo en
|
||||
varias centenas de miles de líneas de código. 5.x es la vanguardia del
|
||||
desarrollo del kernel de Linux; el kernel utiliza un modelo de desarrollo
|
||||
continuo que está integrando continuamente cambios importantes.
|
||||
|
||||
Se sigue una disciplina relativamente sencilla con respecto a la fusión
|
||||
de parches para cada lanzamiento. Al comienzo de cada ciclo de desarrollo,
|
||||
se dice que la "merge window" (ventana de fusión) está abierta. En ese
|
||||
momento, el código que se considera lo suficientemente estable (y que es
|
||||
aceptado por la comunidad de desarrollo) se fusiona en el kernel mainline.
|
||||
La mayor parte de los cambios para un nuevo ciclo de desarrollo (y todos
|
||||
los cambios principales) se fusionarán durante este tiempo, a un ritmo
|
||||
cercano a los 1,000 cambios (“parches” o “conjuntos de cambios”) por
|
||||
día.
|
||||
|
||||
(Aparte, vale la pena señalar que los cambios integrados durante la
|
||||
ventana de fusión no surgen de la nada; han sido recolectados, probados
|
||||
y montados con anticipación. Como funciona ese proceso se describirá en
|
||||
detalle más adelante).
|
||||
|
||||
La ventana de fusión dura aproximadamente dos semanas. Al final de este
|
||||
tiempo, Linux Torvalds declarará que la ventana está cerrada y publicará
|
||||
el primero de los kernels “rc”. Para el kernel destinado a ser 5.6, por
|
||||
ejemplo, el lanzamiento al final de la ventana de fusión se llamará
|
||||
5.6-rc1. El lanzamiento -rc1 señala que el tiempo para fusionar nuevas
|
||||
características ha pasado y que el tiempo para estabilizar el siguiente
|
||||
kernel ha comenzado.
|
||||
|
||||
Durante las próximas seis a diez semanas, solo los parches que solucionen
|
||||
problemas deben enviarse al mainline. En ocasiones, se permitirá un cambio
|
||||
más significativo, pero tales ocasiones son raras; los desarrolladores que
|
||||
intentan fusionar nuevas características fuera de la ventana de fusión
|
||||
suelen recibir una recepción poco amistosa. Como regla general, si se
|
||||
pierde la ventana de fusión de una característica determinada, lo mejor
|
||||
que puede hacer es esperar al siguiente ciclo de desarrollo. (Se hace una
|
||||
excepción ocasional para los drivers de hardware que no se admitía
|
||||
anteriormente; si no afectan a ningún código en árbol, no pueden causar
|
||||
regresiones y debería ser seguro agregarlos en cualquier momento).
|
||||
|
||||
A medida que las correcciones se abren paso en el mainline, la tasa de
|
||||
parches se ralentizará con el tiempo. Linus lanza nuevos kernels -rc
|
||||
aproximadamente una vez a la semana; una serie normal llegará a algún
|
||||
punto entre -rc6 y -rc9 antes de que se considere que el kernel es
|
||||
suficientemente estable y realice el lanzamiento final. En ese momento,
|
||||
todo el proceso vuelve a empezar.
|
||||
|
||||
Como ejemplo, así fue el ciclo de desarrollo de 5.4 (todas las fechas son
|
||||
de 2019):
|
||||
|
||||
============== =======================================
|
||||
Septiembre 15 5.3 lanzamiento estable
|
||||
Septiembre 30 5.4-rc1, la ventana de fusion se cierra
|
||||
Octubre 6 5.4-rc2
|
||||
Octubre 13 5.4-rc3
|
||||
Octubre 20 5.4-rc4
|
||||
Octubre 27 5.4-rc5
|
||||
Noviembre 3 5.4-rc6
|
||||
Noviembre 10 5.4-rc7
|
||||
Noviembre 17 5.4-rc8
|
||||
Noviembre 24 5.4 lanzamiento estable
|
||||
============== =======================================
|
||||
|
||||
¿Cómo deciden los desarrolladores cuándo cerrar el ciclo de desarrollo
|
||||
y crear el lanzamiento estable? La métrica más significativa utilizada
|
||||
es la lista de regresiones de lanzamientos anteriores. Ningunos errores
|
||||
son bienvenidos, pero aquellos que rompen sistemas que funcionaron en el
|
||||
pasado se consideran especialmente graves. Por esta razón, los parches
|
||||
que causan regresiones se ven con malos ojos y es bastante probable que
|
||||
se reviertan durante el periodo de estabilización.
|
||||
|
||||
El objetivo de los desarrolladores es corregir todas las regresiones
|
||||
conocidas antes de que se realice el lanzamiento estable. En el mundo
|
||||
real, este tipo de perfección es difícil de lograr; hay demasiados
|
||||
variables en un proyecto de este tamaño. Llega un punto en el que
|
||||
retrasar el lanzamiento final solo empeora el problema; la pila de cambios
|
||||
que esperan la siguiente ventana de fusión crecerá, creando aún más
|
||||
regresiones la próxima vez. Por lo tanto, la mayoría de los kernels 5.x
|
||||
se lanzan con un punado de regresiones conocidas, aunque, con suerte,
|
||||
ninguna de ellas es seria.
|
||||
|
||||
Una vez que se realiza un lanzamiento estable, su mantenimiento continuo
|
||||
se transfiere al “equipo estable”, actualmente encabezado por Greg
|
||||
Kroah-Hartman. El equipo estable lanzará actualizaciones ocasionales al
|
||||
lanzamiento estable utilizando el esquema de numeración 5.x.y. Para ser
|
||||
considerado para un lanzamiento de actualización, un parche debe
|
||||
(1) corregir un error significativo y (2) ya estar fusionado en el
|
||||
mainline para el siguiente kernel de desarrollo. Por lo general, los
|
||||
kernels recibirán actualizaciones estables durante un poco más de un
|
||||
ciclo de desarrollo después de su lanzamiento inicial. Así, por ejemplo,
|
||||
la historia del kernel 5.2 se veía así (todas las fechas en 2019):
|
||||
|
||||
============== ===============================
|
||||
Julio 7 5.2 lanzamiento estable
|
||||
Julio 14 5.2.1
|
||||
Julio 21 5.2.2
|
||||
Julio 26 5.2.3
|
||||
Julio 28 5.2.4
|
||||
Julio 31 5.2.5
|
||||
... ...
|
||||
Octubre 11 5.2.21
|
||||
============== ===============================
|
||||
|
||||
5.2.21 fue la última actualización estable del lanzamiento 5.2.
|
||||
|
||||
Algunos kernels se designan como kernels “a largo plazo”; recibirán
|
||||
soporte durante un periodo más largo. Consulte el siguiente enlace para
|
||||
obtener la lista de versiones activas del kernel a largo plazos y sus
|
||||
maintainers:
|
||||
|
||||
https://www.kernel.org/category/releases.html
|
||||
|
||||
La selección de un kernel para soporte a largo plazo es puramente una
|
||||
cuestión de que un maintainer tenga la necesidad y el tiempo para
|
||||
mantener ese lanzamiento. No hay planes conocidos para ofrecer soporte a
|
||||
largo plazo para ningún lanzamiento especifico próximo.
|
||||
|
||||
Ciclo de vida de un parche
|
||||
--------------------------
|
||||
|
||||
Los parches no van directamente desde el teclado del desarrollador al
|
||||
kernel mainline. Hay, en cambio, un proceso algo complicado (aunque algo
|
||||
informal) diseñado para garantizar que cada parche sea revisado en cuanto
|
||||
a calidad y que cada parche implemente un cambio que es deseable tener en
|
||||
el mainline. Este proceso puede ocurrir rápidamente para correcciones
|
||||
menores, o, en el caso de cambios grandes y controvertidos, continuar
|
||||
durante años. Gran parte de la frustración de los desarrolladores proviene
|
||||
de la falta de compresión de este proceso o de sus intentos de eludirlo.
|
||||
|
||||
Con la esperanza de reducir esa frustración, este documento describirá
|
||||
cómo un parche entra en el kernel. Lo que sigue a continuación es una
|
||||
introducción que describe el proceso de una manera tanto idealizada. Un
|
||||
tratamiento mucho más detallado vendrá en secciones posteriores.
|
||||
|
||||
Las etapas por las que pasa un parche son, generalmente:
|
||||
|
||||
- Diseño. Aquí es donde se establecen los requisitos reales para el
|
||||
parche – y la forma en que se cumplirán esos requisitos. El trabajo
|
||||
de diseño a menudo se realiza sin involucrar a la comunidad, pero es
|
||||
mejor hacer este trabajo de manera abierta si es posible; puede ahorrar
|
||||
mucho tiempo rediseñando las cosas más tarde.
|
||||
|
||||
- Revisión inicial. Los parches se publican en la lista de correo
|
||||
relevante y los desarrolladores en esa lista responden con cualquier
|
||||
comentario que puedan tener. Este proceso debería revelar cualquier
|
||||
problema importante con un parche si todo va bien.
|
||||
|
||||
- Revisión más amplia. Cuando el parche se acerca a estar listo para su
|
||||
inclusión en el mainline, debe ser aceptado por un maintainer del
|
||||
subsistema relevante – aunque esta aceptación no es una garantía de
|
||||
que el parche llegara hasta el mainline. El parche aparecerá en el
|
||||
árbol de subsistemas del maintainer y en los árboles -next (descritos
|
||||
a continuación). Cuando el proceso funciona, este paso conduce a una
|
||||
revisión exhaustiva del parche y al descubrimiento de cualquier
|
||||
problema resultante de la integración de este parche con el trabajo
|
||||
realizado por otros.
|
||||
|
||||
- Tenga en cuenta que la mayoría de los maintainers también tienen
|
||||
trabajos diurnos, por lo que fusionar su parche no puede ser su máxima
|
||||
prioridad. Si su parche está recibiendo comentarios sobre los cambios
|
||||
que se necesitan, debería realizar esos cambios o justificar por qué
|
||||
no deberían realizarse. Si su parche no tiene quejas de revisión, pero
|
||||
no está siendo fusionado por el maintainer apropiado del subsistema o
|
||||
del driver, debe ser persistente en la actualización del parche
|
||||
al kernel actual para que se aplique limpiamente y seguir enviándolo
|
||||
para su revisión y fusión.
|
||||
|
||||
- Fusión en el mainline. Eventualmente, un parche exitoso se fusionará
|
||||
en el repositorio mainline administrado por Linux Torvalds. Mas
|
||||
comentarios y/o problemas pueden surgir en este momento; es importante
|
||||
que el desarrollador responda a estos y solucione cualquier problema
|
||||
que surja.
|
||||
|
||||
- Lanzamiento estable. El número de usuarios potencialmente afectados por
|
||||
el parche es ahora grande, por lo que, una vez más, pueden surgir
|
||||
nuevos problemas.
|
||||
|
||||
- Mantenimiento a largo plazo. Si bien un desarrollador puede olvidarse
|
||||
del código después de fusionarlo, ese comportamiento tiende a dejar
|
||||
una impresión negativa en la comunidad de desarrollo. Fusionar el
|
||||
código elimina parte de la carga de mantenimiento; otros solucionarán
|
||||
los problemas causados por los cambios en la API. Sin embargo, el
|
||||
desarrollador original debe seguir asumiendo la responsabilidad del
|
||||
código si quiere seguir siendo útil a largo plazo.
|
||||
|
||||
Uno de los peores errores cometidos por los desarrolladores del kernel
|
||||
(o sus empleadores) es tratar de reducir el proceso a un solo paso de
|
||||
“fusión en el mainline”. Este enfoque conduce invariablemente a la
|
||||
frustración de todos los involucrados.
|
||||
|
||||
Cómo se integran los parches en el kernel
|
||||
-----------------------------------------
|
||||
|
||||
Hay exactamente una persona que puede fusionar parches en el repositorio
|
||||
mainline del kernel: Linus Torvalds. Pero, por ejemplo, de los más de
|
||||
9,500 parches que se incluyeron en el kernel 2.6.38, solo 112 (alrededor
|
||||
del 1.3%) fueron elegidos directamente por Linus mismo. El proyecto del
|
||||
kernel ha crecido mucho desde hace tiempo a un tamaño en el que ningún
|
||||
desarrollador individual podría inspeccionar y seleccionar todos los
|
||||
parches sin ayuda. La forma que los desarrolladores del kernel han
|
||||
abordado este crecimiento es a través del uso de un sistema jerárquico
|
||||
alrededor de una cadena de confianza.
|
||||
|
||||
La base de código del kernel se descompone lógicamente en un conjunto de
|
||||
subsistemas: redes, soporte de arquitectura especifica, gestión de
|
||||
memoria, dispositivos de video, etc. La mayoría de los subsistemas tienen
|
||||
un maintainer designado, un desarrollador que tiene la responsabilidad
|
||||
general del código dentro de ese subsistema. Estos maintainers de
|
||||
subsistemas son los guardianes (en cierto modo) de la parte del kernel que
|
||||
gestionan; son los que (usualmente) aceptarán un parche para incluirlo en
|
||||
el kernel mainline.
|
||||
|
||||
Cada uno de los maintainers del subsistema administra su propia versión
|
||||
del árbol de fuentes del kernel, generalmente (pero, ciertamente no
|
||||
siempre) usando la herramienta de administración de código fuente de git.
|
||||
Herramientas como git (y herramientas relacionadas como quilt o mercurial)
|
||||
permiten a los maintainers realizar un seguimiento de una lista de
|
||||
parches, incluida la información de autoría y otros metadatos. En
|
||||
cualquier momento, el maintainer puede identificar qué parches de su
|
||||
repositorio no se encuentran en el mainline.
|
||||
|
||||
Cuando se abre la ventana de fusión, los maintainers de nivel superior
|
||||
le pedirán a Linus que “extraiga” los parches que han seleccionado para
|
||||
fusionar de sus repositorios. Si Linus está de acuerdo, el flujo de
|
||||
parches fluirá hacia su repositorio, convirtiéndose en parte del kernel
|
||||
mainline. La cantidad de atención que Linus presta a los parches
|
||||
específicos recibidos en una operación de extracción varia. Está claro
|
||||
que, a veces, examina bastante de cerca. Pero, como regla general, Linus
|
||||
confía en que los maintainers del subsistema no envíen parches
|
||||
defectuosos al upstream.
|
||||
|
||||
Los maintainers de subsistemas, a su vez, pueden extraer parches de otros
|
||||
maintainers. Por ejemplo, el árbol de red se construye a partir de
|
||||
parches que se acumulan primero en arboles dedicados a drivers de
|
||||
dispositivos de red, redes inalámbricas, etc. Esta cadena de repositorios
|
||||
puede ser arbitrariamente larga, aunque rara vez supera los dos o tres
|
||||
enlaces. Dado que cada maintainer de la cadena confía en los que
|
||||
administran árboles de nivel inferior, este proceso se conoce como la
|
||||
“cadena de confianza”.
|
||||
|
||||
Claramente, en un sistema como este, lograr que los parches se integren
|
||||
en el kernel depende de encontrar el maintainer adecuado. Enviar parches
|
||||
directamente a Linus no es normalmente la forma correcta de hacerlo.
|
||||
|
||||
Árboles siguientes (next)
|
||||
-------------------------
|
||||
|
||||
La cadena de árboles de subsistemas guía el flujo de parches en el
|
||||
kernel, pero también plantea una pregunta interesante: ¿Qué pasa si
|
||||
alguien quiere ver todos los parches que se están preparando para la
|
||||
próxima ventana de fusión? Los desarrolladores estarán interesados en
|
||||
saber que otros cambios están pendientes para ver si hay algún conflicto
|
||||
del que preocuparse; un parche que cambia un prototipo de función del
|
||||
núcleo del kernel, por ejemplo, entrará en conflicto con cualquier otro
|
||||
parche que utilice la forma anterior de esa función. Los revisores y
|
||||
probadores quieren tener acceso a los cambios en su forma integrada antes
|
||||
de que todos esos cambios se integren en el kernel mainline. Uno podría
|
||||
extraer cambios de todos los árboles de subsistemas interesantes, pero
|
||||
eso sería un trabajo tedioso y propenso a errores.
|
||||
|
||||
La respuesta viene en forma de árboles -next, donde los árboles de
|
||||
subsistemas se recopilan para pruebas y revisiones. El más antiguo de
|
||||
estos árboles, mantenido por Andrew Morton, se llama “-mm” (por gestión
|
||||
de la memoria, que es como comenzó). El árbol “-mm” integra parches
|
||||
de una larga lista de árboles de subsistemas; también tiene algunos
|
||||
parches destinados a ayudar con la depuración.
|
||||
|
||||
Más allá de eso, -mm contiene una colección significativa de parches
|
||||
que han sido seleccionados directamente por Andrew. Estos parches pueden
|
||||
haber sido publicados en una lista de correo o aplicarse a una parte del
|
||||
kernel para la que no hay un árbol de subsistemas designado. Como
|
||||
resultado, -mm funciona como una especie de árbol de subsistemas de
|
||||
último recurso; si no hay otro camino obvio para un parche en el mainline,
|
||||
es probable que termine en -mm. Los parches misceláneos que se acumulan
|
||||
en -mm eventualmente se enviarán a un árbol de subsistema apropiado o se
|
||||
enviarán directamente a Linus. En un ciclo de desarrollo típico,
|
||||
aproximadamente el 5-10% de los parches que van al mainline llegan allí
|
||||
a través de -mm.
|
||||
|
||||
El parche -mm actual está disponible en el directorio “mmotm” (-mm
|
||||
del momento) en:
|
||||
|
||||
https://www.ozlabs.org/~akpm/mmotm/
|
||||
|
||||
Sin embargo, es probable que el uso del árbol MMOTM sea una experiencia
|
||||
frustrante; existe una posibilidad definitiva de que ni siquiera se
|
||||
compile.
|
||||
|
||||
El árbol principal para la fusión de parches del siguiente ciclo es
|
||||
linux-next, mantenido por Stephen Rothwell. El árbol linux-next es, por
|
||||
diseño, una instantánea de cómo se espera que se vea el mainline después
|
||||
de que se cierre la siguiente ventana de fusión. Los árboles linux-next
|
||||
se anuncian en las listas de correo linux-kernel y linux-next cuando se
|
||||
ensamblan; Se pueden descargar desde:
|
||||
|
||||
https://www.kernel.org/pub/linux/kernel/next/
|
||||
|
||||
Linux-next se ha convertido en una parte integral del proceso de
|
||||
desarrollo del kernel; todos los parches fusionados durante una ventana
|
||||
de fusión determinada deberían haber encontrado su camino en linux-next
|
||||
en algún momento antes de que se abra la ventana de fusión.
|
||||
|
||||
Árboles de staging
|
||||
------------------
|
||||
|
||||
El árbol de fuentes del kernel contiene el directorio drivers/staging/,
|
||||
donde residen muchos subdirectorios para drivers o sistemas de archivos
|
||||
que están en proceso de ser agregados al árbol del kernel. Permanecen
|
||||
en drivers/staging mientras aún necesitan más trabajo; una vez
|
||||
completados, se pueden mover al kernel propiamente dicho. Esta es una
|
||||
forma de realizar un seguimiento de los drivers drivers que no están a la
|
||||
altura de la codificación o los estándares de calidad del kernel de
|
||||
Linux, pero que las personas pueden querer usarlos y realizar un
|
||||
seguimiento del desarrollo.
|
||||
|
||||
Greg Kroah-Hartman mantiene actualmente el árbol de staging. Los drivers
|
||||
que aun necesitan trabajo se le envían, y cada driver tiene su propio
|
||||
subdirectorio en drivers/staging/. Junto con los archivos de origen del
|
||||
driver, también debe haber un archivo TODO en el directorio. El archivo
|
||||
TODO enumera el trabajo pendiente que el driver necesita para ser aceptado
|
||||
en el kernel propiamente dicho, así como una lista de personas a las que
|
||||
Cc’d para cualquier parche para el driver. Las reglas actuales exigen
|
||||
que los drivers que contribuyen a staging deben, como mínimo, compilarse
|
||||
correctamente.
|
||||
|
||||
El staging puede ser una forma relativamente fácil de conseguir nuevos
|
||||
drivers en el mainline donde, con suerte, llamarán la atención de otros
|
||||
desarrolladores y mejorarán rápidamente. Sin embargo, la entrada en el
|
||||
staging no es el final de la historia; el código que no está viendo
|
||||
progreso regular eventualmente será eliminado. Los distribuidores también
|
||||
tienden a ser relativamente reacios a habilitar los drivers de staging.
|
||||
Por lo tanto, el staging es, en el mejor de los casos, una parada en el
|
||||
camino para hacia convertirse en un apropiado driver del mainline.
|
||||
|
||||
Herramientas
|
||||
------------
|
||||
|
||||
Como se puede ver en el texto anterior, el proceso de desarrollo del
|
||||
kernel depende en gran medida de la capacidad de dirigir colecciones de
|
||||
parches en varias direcciones. Todo ello no funcionaría tan bien como lo
|
||||
hace sin herramientas apropiadamente potentes. Los tutoriales sobre cómo
|
||||
usar estas herramientas están mucho más allá del alcance de este
|
||||
documento, pero hay espacio para algunos consejos.
|
||||
|
||||
Con mucho, el sistema de gestión de código fuente dominante utilizado
|
||||
por la comunidad del kernel es git. Git es uno de los varios sistemas de
|
||||
control de versiones distribuidos que se están desarrollando en la
|
||||
comunidad de software libre. Está bien ajustado para el desarrollo de
|
||||
kernel, ya que funciona bastante bien cuando se trata de grandes
|
||||
repositorios y grandes cantidades de parches. También tiene la reputación
|
||||
de ser difícil de aprender y usar, aunque ha mejorado con el tiempo.
|
||||
Algún tipo de familiaridad con git es casi un requisito para los
|
||||
desarrolladores del kernel; incluso si no lo usan para su propio
|
||||
trabajo, necesitarán git para mantenerse al día con lo que otros
|
||||
desarrolladores (y el mainline) están haciendo.
|
||||
|
||||
Git ahora está empaquetado por casi todas las distribuciones de Linux.
|
||||
Hay una página de inicio en:
|
||||
|
||||
https://git-scm.com/
|
||||
|
||||
Esa página tiene punteros a documentación y tutoriales.
|
||||
|
||||
Entre los desarrolladores de kernel que no usan git, la opción más
|
||||
popular es casi con certeza Mercurial:
|
||||
|
||||
https://www.selenic.com/mercurial/
|
||||
|
||||
Mercurial comparte muchas características con git, pero proporciona una
|
||||
interfaz que muchos encuentran más fácil de usar.
|
||||
|
||||
Otra herramienta que vale la pena conocer es Quilt:
|
||||
|
||||
https://savannah.nongnu.org/projects/quilt/
|
||||
|
||||
Quilt es un sistema de gestión de parches, en lugar de un sistema de
|
||||
gestión de código fuente. No rastrea el historial a lo largo del tiempo;
|
||||
en cambio, está orientado al seguimiento de un conjunto especifico de
|
||||
cambios en relación con una base de código en evolución. Algunos de los
|
||||
principales maintainers de subsistemas utilizan Quilt para gestionar los
|
||||
parches destinados a ir upstream. Para la gestión de ciertos tipos de
|
||||
árboles (por ejemplo, -mm) Quilt es la mejor herramienta para el trabajo.
|
||||
|
||||
Listas de correo
|
||||
----------------
|
||||
|
||||
Una gran parte del trabajo de desarrollo del kernel de Linux se realiza a
|
||||
través de listas de correo. Es difícil ser un miembro plenamente funcional
|
||||
de la comunidad sin unirse al menos a una lista en algún parte. Pero las
|
||||
listas de correo de Linux también representan un peligro potencial para
|
||||
los desarrolladores, que corren el riesgo de quedar enterrados bajo una
|
||||
carga de correo electrónico, incumplir las convenciones utilizadas en las
|
||||
listas de Linux, o ambas cosas.
|
||||
|
||||
La mayoría de las listas de correo del kernel se ejecutan en
|
||||
vger.kernel.org; la lista principal se puede encontrar en:
|
||||
|
||||
http://vger.kernel.org/vger-lists.html
|
||||
|
||||
Sim embargo, hay listas alojadas en otros lugares; varios de ellos se
|
||||
encuentran en redhat.com/mailman/listinfo.
|
||||
|
||||
La lista de correo principal para el desarrollo del kernel es, por
|
||||
supuesto, linux-kernel. Esta lista es un lugar intimidante; el volumen
|
||||
puede alcanzar 500 mensajes por día, la cantidad de ruido es alta, la
|
||||
conversación puede ser muy técnica y los participantes no siempre se
|
||||
preocupan por mostrar un alto grado de cortesía. Pero no hay otro lugar
|
||||
donde la comunidad de desarrollo del kernel se reúna como un todo; los
|
||||
desarrolladores que eviten esta lista se perderán información importante.
|
||||
|
||||
Hay algunos consejos que pueden ayudar a sobrevivir en el kernel de Linux:
|
||||
|
||||
- Haga que la lista se entregue en una carpeta separada, en lugar de su
|
||||
buzón principal. Uno debe ser capaz de ignorar el flujo durante
|
||||
periodos prolongados.
|
||||
|
||||
- No trate de seguir cada conversación, nadie lo hace. Es importante
|
||||
filtrar tanto por el tema de interés (aunque tenga en cuenta que las
|
||||
conversaciones prolongadas pueden alejarse del asunto original sin
|
||||
cambiar la línea de asunto del correo electrónico) por las personas
|
||||
que participan.
|
||||
|
||||
- No alimente a los trolls. Si alguien está tratando de provocar una
|
||||
respuesta de enojo, ignórelos.
|
||||
|
||||
- Al responder al correo electrónico del kernel de Linux (o al de otras
|
||||
listas) conserve el encabezado Cc: para todos los involucrados. En
|
||||
ausencia de una razón solida (como una solicitud explícita), nunca debe
|
||||
eliminar destinarios. Asegúrese siempre de que la persona a la que está
|
||||
respondiendo esté en la lista Cc:. Esta convención también hace que no
|
||||
sea necesario solicitar explícitamente que se le copie en las respuestas
|
||||
a sus publicaciones.
|
||||
|
||||
- Busque en los archivos de la lista (y en la red en su conjunto) antes
|
||||
de hacer preguntas. Algunos desarrolladores pueden impacientarse con
|
||||
las personas que claramente no han hecho sus deberes.
|
||||
|
||||
- Utilice respuestas intercaladas (“en línea”), lo que hace que su
|
||||
respuesta sea más fácil de leer. (Es decir, evite top-posting – la
|
||||
práctica de poner su respuesta encima del texto citado al que está
|
||||
respondiendo.) Para obtener más información, consulte
|
||||
:ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_interleaved_replies>`.
|
||||
|
||||
- Pregunte en la lista de correo correcta. linux-kernel puede ser el
|
||||
punto de encuentro general, pero no es el mejor lugar para encontrar
|
||||
desarrolladores de todos los subsistemas.
|
||||
|
||||
El último punto, encontrar la lista de correo correcta, es una fuente
|
||||
común de errores para desarrolladores principiantes. Alguien que haga
|
||||
una pregunta relacionada con las redes en linux-kernel seguramente
|
||||
recibirá una surgencia educada para preguntar en la lista de netdev en su
|
||||
lugar, ya que esa es la lista frecuentada por la mayoría de los
|
||||
desarrolladores de redes. Existen otras listas para los subsistemas SCSI,
|
||||
video4linux, IDE, sistema de archivos, etc. El mejor lugar para buscar
|
||||
listas de correo es en el archivo MAINTAINERS incluido con el código
|
||||
fuente del kernel.
|
||||
|
||||
Comenzar con el desarrollo del kernel
|
||||
-------------------------------------
|
||||
|
||||
Las preguntas sobre como comenzar con el proceso de desarrollo del kernel
|
||||
son comunes, tanto de individuos como de empresas. Igualmente comunes son
|
||||
los pasos en falso que hacen que el comienzo de la relación sea más
|
||||
difícil de lo que tiene que ser.
|
||||
|
||||
Las empresas a menudo buscan contratar desarrolladores conocidos para
|
||||
iniciar un grupo de desarrollo. De hecho, esta puede ser una técnica
|
||||
efectiva. Pero también tiende a ser caro y no hace mucho para crecer el
|
||||
grupo de desarrolladores de kernel experimentados. Es posible poner al
|
||||
día a los desarrolladores internos en el desarrollo de kernel de Linux,
|
||||
dada la inversión de algún tiempo. Tomarse este tiempo puede dotar a un
|
||||
empleador de un grupo de desarrolladores que comprendan tanto el kernel
|
||||
como la empresa, y que también puedan ayudar a educar a otros. A medio
|
||||
plazo, este es a menudo el enfoque más rentable.
|
||||
|
||||
Los desarrolladores individuales, a menudo, comprensiblemente, no tienen
|
||||
un lugar para empezar. Comenzar con un proyecto grande puede ser
|
||||
intimidante; a menudo uno quiere probar las aguas con algo más pequeño
|
||||
primero. Este es el punto en el que algunos desarrolladores se lanzan a
|
||||
la creación de parches para corregir errores ortográficos o problemas
|
||||
menores de estilo de codificación. Desafortunadamente, dicho parches
|
||||
crean un nivel de ruido que distrae a la comunidad de desarrollo en su
|
||||
conjunto, por lo que, cada vez más, se los mira con desprecio. Los nuevos
|
||||
desarrolladores que deseen presentarse a la comunidad no recibirán la
|
||||
recepción que desean por estos medios.
|
||||
|
||||
Andrew Morton da este consejo (traducido) para los aspirantes a
|
||||
desarrolladores de kernel.
|
||||
|
||||
::
|
||||
|
||||
El proyecto #1 para los principiantes en el kernel seguramente debería
|
||||
ser “asegúrese de que el kernel funcione perfectamente en todo momento
|
||||
en todas las máquinas que pueda conseguir”. Por lo general, la forma
|
||||
de hacer esto es trabajar con otros para arreglar las cosas (¡esto
|
||||
puede requerir persistencia!), pero eso está bien, es parte del
|
||||
desarrollo del kernel.
|
||||
|
||||
(https://lwn.net/Articles/283982/)
|
||||
|
||||
En ausencia de problemas obvios que solucionar, se aconseja a los
|
||||
desarrolladores que consulten las listas actuales de regresiones y errores
|
||||
abiertos en general. Nunca faltan problemas que necesitan solución; al
|
||||
abordar estos problemas, los desarrolladores ganarán experiencia con el
|
||||
proceso mientras, al mismo tiempo, se ganarán el respeto del resto de la
|
||||
comunidad de desarrollo.
|
||||
|
@ -24,3 +24,4 @@ para entenderla.
|
||||
:maxdepth: 2
|
||||
|
||||
1.Intro
|
||||
2.Process
|
||||
|
Loading…
Reference in New Issue
Block a user