1.. include:: ../disclaimer-sp.rst 2 3:Original: Documentation/process/2.Process.rst 4:Translator: Avadhut Naik <avadhut.naik@amd.com> 5 6.. _sp_development_process: 7 8Cómo funciona el proceso de desarrollo 9====================================== 10 11El desarrollo del kernel de Linux a principios de la década de 1990 fue 12un asunto relajado, con un número relativamente pequeño de usuarios y 13desarrolladores involucrados. Con una base de usuarios en los millones y 14alrededor de 2,000 desarrolladores involucrados durante un año, el kernel 15ha tenido que adaptar varios procesos para mantener el desarrollo sin 16problemas. Se requiere una comprensión solida de cómo funciona el proceso 17para ser una parte efectiva del mismo. 18 19El panorama general 20------------------- 21 22Los desarrolladores del kernel utilizan un proceso de lanzamiento basado 23en el tiempo de manera flexible, con uno nuevo lanzamiento principal del 24kernel ocurriendo cada dos o tres meses. El historial reciente de 25lanzamientos se ve así: 26 27 ====== ================== 28 5.0 Marzo 3, 2019 29 5.1 Mayo 5, 2019 30 5.2 Julio 7, 2019 31 5.3 Septiembre 15, 2019 32 5.4 Noviembre 24, 2019 33 5.5 Enero 6, 2020 34 ====== ================== 35 36Cada lanzamiento 5.x es un lanzamiento principal del kernel con nuevas 37características, cambios internos en la API y más. Un lanzamiento típico 38puede contener alrededor de 13,000 conjuntos de cambios incluyendo en 39varias centenas de miles de líneas de código. 5.x es la vanguardia del 40desarrollo del kernel de Linux; el kernel utiliza un modelo de desarrollo 41continuo que está integrando continuamente cambios importantes. 42 43Se sigue una disciplina relativamente sencilla con respecto a la fusión 44de parches para cada lanzamiento. Al comienzo de cada ciclo de desarrollo, 45se dice que la "merge window" (ventana de fusión) está abierta. En ese 46momento, el código que se considera lo suficientemente estable (y que es 47aceptado por la comunidad de desarrollo) se fusiona en el kernel mainline. 48La mayor parte de los cambios para un nuevo ciclo de desarrollo (y todos 49los cambios principales) se fusionarán durante este tiempo, a un ritmo 50cercano a los 1,000 cambios (“parches” o “conjuntos de cambios”) por 51día. 52 53(Aparte, vale la pena señalar que los cambios integrados durante la 54ventana de fusión no surgen de la nada; han sido recolectados, probados 55y montados con anticipación. Como funciona ese proceso se describirá en 56detalle más adelante). 57 58La ventana de fusión dura aproximadamente dos semanas. Al final de este 59tiempo, Linux Torvalds declarará que la ventana está cerrada y publicará 60el primero de los kernels “rc”. Para el kernel destinado a ser 5.6, por 61ejemplo, el lanzamiento al final de la ventana de fusión se llamará 625.6-rc1. El lanzamiento -rc1 señala que el tiempo para fusionar nuevas 63características ha pasado y que el tiempo para estabilizar el siguiente 64kernel ha comenzado. 65 66Durante las próximas seis a diez semanas, solo los parches que solucionen 67problemas deben enviarse al mainline. En ocasiones, se permitirá un cambio 68más significativo, pero tales ocasiones son raras; los desarrolladores que 69intentan fusionar nuevas características fuera de la ventana de fusión 70suelen recibir una recepción poco amistosa. Como regla general, si se 71pierde la ventana de fusión de una característica determinada, lo mejor 72que puede hacer es esperar al siguiente ciclo de desarrollo. (Se hace una 73excepción ocasional para los drivers de hardware que no se admitía 74anteriormente; si no afectan a ningún código en árbol, no pueden causar 75regresiones y debería ser seguro agregarlos en cualquier momento). 76 77A medida que las correcciones se abren paso en el mainline, la tasa de 78parches se ralentizará con el tiempo. Linus lanza nuevos kernels -rc 79aproximadamente una vez a la semana; una serie normal llegará a algún 80punto entre -rc6 y -rc9 antes de que se considere que el kernel es 81suficientemente estable y realice el lanzamiento final. En ese momento, 82todo el proceso vuelve a empezar. 83 84Como ejemplo, así fue el ciclo de desarrollo de 5.4 (todas las fechas son 85de 2019): 86 87 ============== ======================================= 88 Septiembre 15 5.3 lanzamiento estable 89 Septiembre 30 5.4-rc1, la ventana de fusion se cierra 90 Octubre 6 5.4-rc2 91 Octubre 13 5.4-rc3 92 Octubre 20 5.4-rc4 93 Octubre 27 5.4-rc5 94 Noviembre 3 5.4-rc6 95 Noviembre 10 5.4-rc7 96 Noviembre 17 5.4-rc8 97 Noviembre 24 5.4 lanzamiento estable 98 ============== ======================================= 99 100¿Cómo deciden los desarrolladores cuándo cerrar el ciclo de desarrollo 101y crear el lanzamiento estable? La métrica más significativa utilizada 102es la lista de regresiones de lanzamientos anteriores. Ningunos errores 103son bienvenidos, pero aquellos que rompen sistemas que funcionaron en el 104pasado se consideran especialmente graves. Por esta razón, los parches 105que causan regresiones se ven con malos ojos y es bastante probable que 106se reviertan durante el periodo de estabilización. 107 108El objetivo de los desarrolladores es corregir todas las regresiones 109conocidas antes de que se realice el lanzamiento estable. En el mundo 110real, este tipo de perfección es difícil de lograr; hay demasiados 111variables en un proyecto de este tamaño. Llega un punto en el que 112retrasar el lanzamiento final solo empeora el problema; la pila de cambios 113que esperan la siguiente ventana de fusión crecerá, creando aún más 114regresiones la próxima vez. Por lo tanto, la mayoría de los kernels 5.x 115se lanzan con un punado de regresiones conocidas, aunque, con suerte, 116ninguna de ellas es seria. 117 118Una vez que se realiza un lanzamiento estable, su mantenimiento continuo 119se transfiere al “equipo estable”, actualmente encabezado por Greg 120Kroah-Hartman. El equipo estable lanzará actualizaciones ocasionales al 121lanzamiento estable utilizando el esquema de numeración 5.x.y. Para ser 122considerado para un lanzamiento de actualización, un parche debe 123(1) corregir un error significativo y (2) ya estar fusionado en el 124mainline para el siguiente kernel de desarrollo. Por lo general, los 125kernels recibirán actualizaciones estables durante un poco más de un 126ciclo de desarrollo después de su lanzamiento inicial. Así, por ejemplo, 127la historia del kernel 5.2 se veía así (todas las fechas en 2019): 128 129 ============== =============================== 130 Julio 7 5.2 lanzamiento estable 131 Julio 14 5.2.1 132 Julio 21 5.2.2 133 Julio 26 5.2.3 134 Julio 28 5.2.4 135 Julio 31 5.2.5 136 ... ... 137 Octubre 11 5.2.21 138 ============== =============================== 139 1405.2.21 fue la última actualización estable del lanzamiento 5.2. 141 142Algunos kernels se designan como kernels “a largo plazo”; recibirán 143soporte durante un periodo más largo. Consulte el siguiente enlace para 144obtener la lista de versiones activas del kernel a largo plazos y sus 145maintainers: 146 147 https://www.kernel.org/category/releases.html 148 149La selección de un kernel para soporte a largo plazo es puramente una 150cuestión de que un maintainer tenga la necesidad y el tiempo para 151mantener ese lanzamiento. No hay planes conocidos para ofrecer soporte a 152largo plazo para ningún lanzamiento especifico próximo. 153 154Ciclo de vida de un parche 155-------------------------- 156 157Los parches no van directamente desde el teclado del desarrollador al 158kernel mainline. Hay, en cambio, un proceso algo complicado (aunque algo 159informal) diseñado para garantizar que cada parche sea revisado en cuanto 160a calidad y que cada parche implemente un cambio que es deseable tener en 161el mainline. Este proceso puede ocurrir rápidamente para correcciones 162menores, o, en el caso de cambios grandes y controvertidos, continuar 163durante años. Gran parte de la frustración de los desarrolladores proviene 164de la falta de compresión de este proceso o de sus intentos de eludirlo. 165 166Con la esperanza de reducir esa frustración, este documento describirá 167cómo un parche entra en el kernel. Lo que sigue a continuación es una 168introducción que describe el proceso de una manera tanto idealizada. Un 169tratamiento mucho más detallado vendrá en secciones posteriores. 170 171Las etapas por las que pasa un parche son, generalmente: 172 173 - Diseño. Aquí es donde se establecen los requisitos reales para el 174 parche – y la forma en que se cumplirán esos requisitos. El trabajo 175 de diseño a menudo se realiza sin involucrar a la comunidad, pero es 176 mejor hacer este trabajo de manera abierta si es posible; puede ahorrar 177 mucho tiempo rediseñando las cosas más tarde. 178 179 - Revisión inicial. Los parches se publican en la lista de correo 180 relevante y los desarrolladores en esa lista responden con cualquier 181 comentario que puedan tener. Este proceso debería revelar cualquier 182 problema importante con un parche si todo va bien. 183 184 - Revisión más amplia. Cuando el parche se acerca a estar listo para su 185 inclusión en el mainline, debe ser aceptado por un maintainer del 186 subsistema relevante – aunque esta aceptación no es una garantía de 187 que el parche llegara hasta el mainline. El parche aparecerá en el 188 árbol de subsistemas del maintainer y en los árboles -next (descritos 189 a continuación). Cuando el proceso funciona, este paso conduce a una 190 revisión exhaustiva del parche y al descubrimiento de cualquier 191 problema resultante de la integración de este parche con el trabajo 192 realizado por otros. 193 194 - Tenga en cuenta que la mayoría de los maintainers también tienen 195 trabajos diurnos, por lo que fusionar su parche no puede ser su máxima 196 prioridad. Si su parche está recibiendo comentarios sobre los cambios 197 que se necesitan, debería realizar esos cambios o justificar por qué 198 no deberían realizarse. Si su parche no tiene quejas de revisión, pero 199 no está siendo fusionado por el maintainer apropiado del subsistema o 200 del driver, debe ser persistente en la actualización del parche 201 al kernel actual para que se aplique limpiamente y seguir enviándolo 202 para su revisión y fusión. 203 204 - Fusión en el mainline. Eventualmente, un parche exitoso se fusionará 205 en el repositorio mainline administrado por Linux Torvalds. Mas 206 comentarios y/o problemas pueden surgir en este momento; es importante 207 que el desarrollador responda a estos y solucione cualquier problema 208 que surja. 209 210 - Lanzamiento estable. El número de usuarios potencialmente afectados por 211 el parche es ahora grande, por lo que, una vez más, pueden surgir 212 nuevos problemas. 213 214 - Mantenimiento a largo plazo. Si bien un desarrollador puede olvidarse 215 del código después de fusionarlo, ese comportamiento tiende a dejar 216 una impresión negativa en la comunidad de desarrollo. Fusionar el 217 código elimina parte de la carga de mantenimiento; otros solucionarán 218 los problemas causados por los cambios en la API. Sin embargo, el 219 desarrollador original debe seguir asumiendo la responsabilidad del 220 código si quiere seguir siendo útil a largo plazo. 221 222Uno de los peores errores cometidos por los desarrolladores del kernel 223(o sus empleadores) es tratar de reducir el proceso a un solo paso de 224“fusión en el mainline”. Este enfoque conduce invariablemente a la 225frustración de todos los involucrados. 226 227Cómo se integran los parches en el kernel 228----------------------------------------- 229 230Hay exactamente una persona que puede fusionar parches en el repositorio 231mainline del kernel: Linus Torvalds. Pero, por ejemplo, de los más de 2329,500 parches que se incluyeron en el kernel 2.6.38, solo 112 (alrededor 233del 1.3%) fueron elegidos directamente por Linus mismo. El proyecto del 234kernel ha crecido mucho desde hace tiempo a un tamaño en el que ningún 235desarrollador individual podría inspeccionar y seleccionar todos los 236parches sin ayuda. La forma que los desarrolladores del kernel han 237abordado este crecimiento es a través del uso de un sistema jerárquico 238alrededor de una cadena de confianza. 239 240La base de código del kernel se descompone lógicamente en un conjunto de 241subsistemas: redes, soporte de arquitectura especifica, gestión de 242memoria, dispositivos de video, etc. La mayoría de los subsistemas tienen 243un maintainer designado, un desarrollador que tiene la responsabilidad 244general del código dentro de ese subsistema. Estos maintainers de 245subsistemas son los guardianes (en cierto modo) de la parte del kernel que 246gestionan; son los que (usualmente) aceptarán un parche para incluirlo en 247el kernel mainline. 248 249Cada uno de los maintainers del subsistema administra su propia versión 250del árbol de fuentes del kernel, generalmente (pero, ciertamente no 251siempre) usando la herramienta de administración de código fuente de git. 252Herramientas como git (y herramientas relacionadas como quilt o mercurial) 253permiten a los maintainers realizar un seguimiento de una lista de 254parches, incluida la información de autoría y otros metadatos. En 255cualquier momento, el maintainer puede identificar qué parches de su 256repositorio no se encuentran en el mainline. 257 258Cuando se abre la ventana de fusión, los maintainers de nivel superior 259le pedirán a Linus que “extraiga” los parches que han seleccionado para 260fusionar de sus repositorios. Si Linus está de acuerdo, el flujo de 261parches fluirá hacia su repositorio, convirtiéndose en parte del kernel 262mainline. La cantidad de atención que Linus presta a los parches 263específicos recibidos en una operación de extracción varia. Está claro 264que, a veces, examina bastante de cerca. Pero, como regla general, Linus 265confía en que los maintainers del subsistema no envíen parches 266defectuosos al upstream. 267 268Los maintainers de subsistemas, a su vez, pueden extraer parches de otros 269maintainers. Por ejemplo, el árbol de red se construye a partir de 270parches que se acumulan primero en arboles dedicados a drivers de 271dispositivos de red, redes inalámbricas, etc. Esta cadena de repositorios 272puede ser arbitrariamente larga, aunque rara vez supera los dos o tres 273enlaces. Dado que cada maintainer de la cadena confía en los que 274administran árboles de nivel inferior, este proceso se conoce como la 275“cadena de confianza”. 276 277Claramente, en un sistema como este, lograr que los parches se integren 278en el kernel depende de encontrar el maintainer adecuado. Enviar parches 279directamente a Linus no es normalmente la forma correcta de hacerlo. 280 281Árboles siguientes (next) 282------------------------- 283 284La cadena de árboles de subsistemas guía el flujo de parches en el 285kernel, pero también plantea una pregunta interesante: ¿Qué pasa si 286alguien quiere ver todos los parches que se están preparando para la 287próxima ventana de fusión? Los desarrolladores estarán interesados en 288saber que otros cambios están pendientes para ver si hay algún conflicto 289del que preocuparse; un parche que cambia un prototipo de función del 290núcleo del kernel, por ejemplo, entrará en conflicto con cualquier otro 291parche que utilice la forma anterior de esa función. Los revisores y 292probadores quieren tener acceso a los cambios en su forma integrada antes 293de que todos esos cambios se integren en el kernel mainline. Uno podría 294extraer cambios de todos los árboles de subsistemas interesantes, pero 295eso sería un trabajo tedioso y propenso a errores. 296 297La respuesta viene en forma de árboles -next, donde los árboles de 298subsistemas se recopilan para pruebas y revisiones. El más antiguo de 299estos árboles, mantenido por Andrew Morton, se llama “-mm” (por gestión 300de la memoria, que es como comenzó). El árbol “-mm” integra parches 301de una larga lista de árboles de subsistemas; también tiene algunos 302parches destinados a ayudar con la depuración. 303 304Más allá de eso, -mm contiene una colección significativa de parches 305que han sido seleccionados directamente por Andrew. Estos parches pueden 306haber sido publicados en una lista de correo o aplicarse a una parte del 307kernel para la que no hay un árbol de subsistemas designado. Como 308resultado, -mm funciona como una especie de árbol de subsistemas de 309último recurso; si no hay otro camino obvio para un parche en el mainline, 310es probable que termine en -mm. Los parches misceláneos que se acumulan 311en -mm eventualmente se enviarán a un árbol de subsistema apropiado o se 312enviarán directamente a Linus. En un ciclo de desarrollo típico, 313aproximadamente el 5-10% de los parches que van al mainline llegan allí 314a través de -mm. 315 316El parche -mm actual está disponible en el directorio “mmotm” (-mm 317del momento) en: 318 319 https://www.ozlabs.org/~akpm/mmotm/ 320 321Sin embargo, es probable que el uso del árbol MMOTM sea una experiencia 322frustrante; existe una posibilidad definitiva de que ni siquiera se 323compile. 324 325El árbol principal para la fusión de parches del siguiente ciclo es 326linux-next, mantenido por Stephen Rothwell. El árbol linux-next es, por 327diseño, una instantánea de cómo se espera que se vea el mainline después 328de que se cierre la siguiente ventana de fusión. Los árboles linux-next 329se anuncian en las listas de correo linux-kernel y linux-next cuando se 330ensamblan; Se pueden descargar desde: 331 332 https://www.kernel.org/pub/linux/kernel/next/ 333 334Linux-next se ha convertido en una parte integral del proceso de 335desarrollo del kernel; todos los parches fusionados durante una ventana 336de fusión determinada deberían haber encontrado su camino en linux-next 337en algún momento antes de que se abra la ventana de fusión. 338 339Árboles de staging 340------------------ 341 342El árbol de fuentes del kernel contiene el directorio drivers/staging/, 343donde residen muchos subdirectorios para drivers o sistemas de archivos 344que están en proceso de ser agregados al árbol del kernel. Permanecen 345en drivers/staging mientras aún necesitan más trabajo; una vez 346completados, se pueden mover al kernel propiamente dicho. Esta es una 347forma de realizar un seguimiento de los drivers drivers que no están a la 348altura de la codificación o los estándares de calidad del kernel de 349Linux, pero que las personas pueden querer usarlos y realizar un 350seguimiento del desarrollo. 351 352Greg Kroah-Hartman mantiene actualmente el árbol de staging. Los drivers 353que aun necesitan trabajo se le envían, y cada driver tiene su propio 354subdirectorio en drivers/staging/. Junto con los archivos de origen del 355driver, también debe haber un archivo TODO en el directorio. El archivo 356TODO enumera el trabajo pendiente que el driver necesita para ser aceptado 357en el kernel propiamente dicho, así como una lista de personas a las que 358Cc’d para cualquier parche para el driver. Las reglas actuales exigen 359que los drivers que contribuyen a staging deben, como mínimo, compilarse 360correctamente. 361 362El staging puede ser una forma relativamente fácil de conseguir nuevos 363drivers en el mainline donde, con suerte, llamarán la atención de otros 364desarrolladores y mejorarán rápidamente. Sin embargo, la entrada en el 365staging no es el final de la historia; el código que no está viendo 366progreso regular eventualmente será eliminado. Los distribuidores también 367tienden a ser relativamente reacios a habilitar los drivers de staging. 368Por lo tanto, el staging es, en el mejor de los casos, una parada en el 369camino para hacia convertirse en un apropiado driver del mainline. 370 371Herramientas 372------------ 373 374Como se puede ver en el texto anterior, el proceso de desarrollo del 375kernel depende en gran medida de la capacidad de dirigir colecciones de 376parches en varias direcciones. Todo ello no funcionaría tan bien como lo 377hace sin herramientas apropiadamente potentes. Los tutoriales sobre cómo 378usar estas herramientas están mucho más allá del alcance de este 379documento, pero hay espacio para algunos consejos. 380 381Con mucho, el sistema de gestión de código fuente dominante utilizado 382por la comunidad del kernel es git. Git es uno de los varios sistemas de 383control de versiones distribuidos que se están desarrollando en la 384comunidad de software libre. Está bien ajustado para el desarrollo de 385kernel, ya que funciona bastante bien cuando se trata de grandes 386repositorios y grandes cantidades de parches. También tiene la reputación 387de ser difícil de aprender y usar, aunque ha mejorado con el tiempo. 388Algún tipo de familiaridad con git es casi un requisito para los 389desarrolladores del kernel; incluso si no lo usan para su propio 390trabajo, necesitarán git para mantenerse al día con lo que otros 391desarrolladores (y el mainline) están haciendo. 392 393Git ahora está empaquetado por casi todas las distribuciones de Linux. 394Hay una página de inicio en: 395 396 https://git-scm.com/ 397 398Esa página tiene punteros a documentación y tutoriales. 399 400Entre los desarrolladores de kernel que no usan git, la opción más 401popular es casi con certeza Mercurial: 402 403 https://www.selenic.com/mercurial/ 404 405Mercurial comparte muchas características con git, pero proporciona una 406interfaz que muchos encuentran más fácil de usar. 407 408Otra herramienta que vale la pena conocer es Quilt: 409 410 https://savannah.nongnu.org/projects/quilt/ 411 412Quilt es un sistema de gestión de parches, en lugar de un sistema de 413gestión de código fuente. No rastrea el historial a lo largo del tiempo; 414en cambio, está orientado al seguimiento de un conjunto especifico de 415cambios en relación con una base de código en evolución. Algunos de los 416principales maintainers de subsistemas utilizan Quilt para gestionar los 417parches destinados a ir upstream. Para la gestión de ciertos tipos de 418árboles (por ejemplo, -mm) Quilt es la mejor herramienta para el trabajo. 419 420Listas de correo 421---------------- 422 423Una gran parte del trabajo de desarrollo del kernel de Linux se realiza a 424través de listas de correo. Es difícil ser un miembro plenamente funcional 425de la comunidad sin unirse al menos a una lista en algún parte. Pero las 426listas de correo de Linux también representan un peligro potencial para 427los desarrolladores, que corren el riesgo de quedar enterrados bajo una 428carga de correo electrónico, incumplir las convenciones utilizadas en las 429listas de Linux, o ambas cosas. 430 431La mayoría de las listas de correo del kernel se ejecutan en 432vger.kernel.org; la lista principal se puede encontrar en: 433 434 http://vger.kernel.org/vger-lists.html 435 436Sim embargo, hay listas alojadas en otros lugares; varios de ellos se 437encuentran en redhat.com/mailman/listinfo. 438 439La lista de correo principal para el desarrollo del kernel es, por 440supuesto, linux-kernel. Esta lista es un lugar intimidante; el volumen 441puede alcanzar 500 mensajes por día, la cantidad de ruido es alta, la 442conversación puede ser muy técnica y los participantes no siempre se 443preocupan por mostrar un alto grado de cortesía. Pero no hay otro lugar 444donde la comunidad de desarrollo del kernel se reúna como un todo; los 445desarrolladores que eviten esta lista se perderán información importante. 446 447Hay algunos consejos que pueden ayudar a sobrevivir en el kernel de Linux: 448 449- Haga que la lista se entregue en una carpeta separada, en lugar de su 450 buzón principal. Uno debe ser capaz de ignorar el flujo durante 451 periodos prolongados. 452 453- No trate de seguir cada conversación, nadie lo hace. Es importante 454 filtrar tanto por el tema de interés (aunque tenga en cuenta que las 455 conversaciones prolongadas pueden alejarse del asunto original sin 456 cambiar la línea de asunto del correo electrónico) por las personas 457 que participan. 458 459- No alimente a los trolls. Si alguien está tratando de provocar una 460 respuesta de enojo, ignórelos. 461 462- Al responder al correo electrónico del kernel de Linux (o al de otras 463 listas) conserve el encabezado Cc: para todos los involucrados. En 464 ausencia de una razón solida (como una solicitud explícita), nunca debe 465 eliminar destinarios. Asegúrese siempre de que la persona a la que está 466 respondiendo esté en la lista Cc:. Esta convención también hace que no 467 sea necesario solicitar explícitamente que se le copie en las respuestas 468 a sus publicaciones. 469 470- Busque en los archivos de la lista (y en la red en su conjunto) antes 471 de hacer preguntas. Algunos desarrolladores pueden impacientarse con 472 las personas que claramente no han hecho sus deberes. 473 474- Utilice respuestas intercaladas (“en línea”), lo que hace que su 475 respuesta sea más fácil de leer. (Es decir, evite top-posting – la 476 práctica de poner su respuesta encima del texto citado al que está 477 respondiendo.) Para obtener más información, consulte 478 :ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_interleaved_replies>`. 479 480- Pregunte en la lista de correo correcta. linux-kernel puede ser el 481 punto de encuentro general, pero no es el mejor lugar para encontrar 482 desarrolladores de todos los subsistemas. 483 484El último punto, encontrar la lista de correo correcta, es una fuente 485común de errores para desarrolladores principiantes. Alguien que haga 486una pregunta relacionada con las redes en linux-kernel seguramente 487recibirá una surgencia educada para preguntar en la lista de netdev en su 488lugar, ya que esa es la lista frecuentada por la mayoría de los 489desarrolladores de redes. Existen otras listas para los subsistemas SCSI, 490video4linux, IDE, sistema de archivos, etc. El mejor lugar para buscar 491listas de correo es en el archivo MAINTAINERS incluido con el código 492fuente del kernel. 493 494Comenzar con el desarrollo del kernel 495------------------------------------- 496 497Las preguntas sobre como comenzar con el proceso de desarrollo del kernel 498son comunes, tanto de individuos como de empresas. Igualmente comunes son 499los pasos en falso que hacen que el comienzo de la relación sea más 500difícil de lo que tiene que ser. 501 502Las empresas a menudo buscan contratar desarrolladores conocidos para 503iniciar un grupo de desarrollo. De hecho, esta puede ser una técnica 504efectiva. Pero también tiende a ser caro y no hace mucho para crecer el 505grupo de desarrolladores de kernel experimentados. Es posible poner al 506día a los desarrolladores internos en el desarrollo de kernel de Linux, 507dada la inversión de algún tiempo. Tomarse este tiempo puede dotar a un 508empleador de un grupo de desarrolladores que comprendan tanto el kernel 509como la empresa, y que también puedan ayudar a educar a otros. A medio 510plazo, este es a menudo el enfoque más rentable. 511 512Los desarrolladores individuales, a menudo, comprensiblemente, no tienen 513un lugar para empezar. Comenzar con un proyecto grande puede ser 514intimidante; a menudo uno quiere probar las aguas con algo más pequeño 515primero. Este es el punto en el que algunos desarrolladores se lanzan a 516la creación de parches para corregir errores ortográficos o problemas 517menores de estilo de codificación. Desafortunadamente, dicho parches 518crean un nivel de ruido que distrae a la comunidad de desarrollo en su 519conjunto, por lo que, cada vez más, se los mira con desprecio. Los nuevos 520desarrolladores que deseen presentarse a la comunidad no recibirán la 521recepción que desean por estos medios. 522 523Andrew Morton da este consejo (traducido) para los aspirantes a 524desarrolladores de kernel. 525 526:: 527 528 El proyecto #1 para los principiantes en el kernel seguramente debería 529 ser “asegúrese de que el kernel funcione perfectamente en todo momento 530 en todas las máquinas que pueda conseguir”. Por lo general, la forma 531 de hacer esto es trabajar con otros para arreglar las cosas (¡esto 532 puede requerir persistencia!), pero eso está bien, es parte del 533 desarrollo del kernel. 534 535(https://lwn.net/Articles/283982/) 536 537En ausencia de problemas obvios que solucionar, se aconseja a los 538desarrolladores que consulten las listas actuales de regresiones y errores 539abiertos en general. Nunca faltan problemas que necesitan solución; al 540abordar estos problemas, los desarrolladores ganarán experiencia con el 541proceso mientras, al mismo tiempo, se ganarán el respeto del resto de la 542comunidad de desarrollo. 543