2.Process.rst 27 KB

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