arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / Documentation / translations / sp_SP / howto.rst
1 .. include:: ./disclaimer-sp.rst
2
3 :Original: :ref:`Documentation/process/howto.rst <process_howto>`
4 :Translator: Carlos Bilbao <carlos.bilbao@amd.com>
5
6 .. _sp_process_howto:
7
8 Cómo participar en el desarrollo del kernel de Linux
9 ====================================================
10
11 Este documento es el principal punto de partida. Contiene instrucciones
12 sobre cómo convertirse en desarrollador del kernel de Linux y explica cómo
13 trabajar con el y en su desarrollo. El documento no tratará ningún aspecto
14 técnico relacionado con la programación del kernel, pero le ayudará
15 guiándole por el camino correcto.
16
17 Si algo en este documento quedara obsoleto, envíe parches al maintainer de
18 este archivo, que se encuentra en la parte superior del documento.
19
20 Introducción
21 ------------
22 ¿De modo que quiere descubrir como convertirse en un/a desarrollador/a del
23 kernel de Linux? Tal vez su jefe le haya dicho, "Escriba un driver de
24 Linux para este dispositivo." El objetivo de este documento en enseñarle
25 todo cuanto necesita para conseguir esto, describiendo el proceso por el
26 que debe pasar, y con indicaciones de como trabajar con la comunidad.
27 También trata de explicar las razones por las cuales la comunidad trabaja
28 de la forma en que lo hace.
29
30 El kernel esta principalmente escrito en C, con algunas partes que son
31 dependientes de la arquitectura en ensamblador. Un buen conocimiento de C
32 es necesario para desarrollar en el kernel. Lenguaje ensamblador (en
33 cualquier arquitectura) no es necesario excepto que planee realizar
34 desarrollo de bajo nivel para dicha arquitectura. Aunque no es un perfecto
35 sustituto para una educación sólida en C y/o años de experiencia, los
36 siguientes libros sirven, como mínimo, como referencia:
37
38 - "The C Programming Language" de Kernighan e Ritchie [Prentice Hall]
39 - "Practical C Programming" de Steve Oualline [O'Reilly]
40 - "C:  A Reference Manual" de Harbison and Steele [Prentice Hall]
41
42 El kernel está escrito usando GNU C y la cadena de herramientas GNU. Si
43 bien se adhiere al estándar ISO C89, utiliza una serie de extensiones que
44 no aparecen en dicho estándar. El kernel usa un C independiente de entorno,
45 sin depender de la biblioteca C estándar, por lo que algunas partes del
46 estándar C no son compatibles. Divisiones de long long arbitrarios o
47 de coma flotante no son permitidas. En ocasiones, puede ser difícil de
48 entender las suposiciones que el kernel hace respecto a la cadena de
49 herramientas y las extensiones que usa, y desafortunadamente no hay
50 referencia definitiva para estas. Consulte las páginas de información de
51 gcc (`info gcc`) para obtener información al respecto.
52
53 Recuerde que está tratando de aprender a trabajar con una comunidad de
54 desarrollo existente. Es un grupo diverso de personas, con altos estándares
55 de código, estilo y procedimiento. Estas normas han sido creadas a lo
56 largo del tiempo en función de lo que se ha encontrado que funciona mejor
57 para un equipo tan grande y geográficamente disperso. Trate de aprender
58 tanto como le sea posible acerca de estos estándares antes de tiempo, ya
59 que están bien documentados; no espere que la gente se adapte a usted o a
60 la forma de hacer las cosas en su empresa.
61
62 Cuestiones legales
63 ------------------
64 El código fuente del kernel de Linux se publica bajo licencia GPL. Por
65 favor, revise el archivo COPYING, presente en la carpeta principal del
66 código fuente, para detalles de la licencia. Si tiene alguna otra pregunta
67 sobre licencias, contacte a un abogado, no pregunte en listas de discusión
68 del kernel de Linux. La gente en estas listas no son abogadas, y no debe
69 confiar en sus opiniones en materia legal.
70
71 Para preguntas y respuestas más frecuentes sobre la licencia GPL, consulte:
72
73         https://www.gnu.org/licenses/gpl-faq.html
74
75 Documentación
76 --------------
77 El código fuente del kernel de Linux tiene una gran variedad de documentos
78 que son increíblemente valiosos para aprender a interactuar con la
79 comunidad del kernel. Cuando se agregan nuevas funciones al kernel, se
80 recomienda que se incluyan nuevos archivos de documentación que expliquen
81 cómo usar la función. Cuando un cambio en el kernel hace que la interfaz
82 que el kernel expone espacio de usuario cambie, se recomienda que envíe la
83 información o un parche en las páginas del manual que expliquen el cambio
84 a mtk.manpages@gmail.com, y CC la lista linux-api@vger.kernel.org.
85
86 Esta es la lista de archivos que están en el código fuente del kernel y son
87 de obligada lectura:
88
89   :ref:`Documentation/admin-guide/README.rst <readme>`
90     Este archivo ofrece una breve descripción del kernel de Linux y
91     describe lo que es necesario hacer para configurar y compilar el
92     kernel. Quienes sean nuevos en el kernel deben comenzar aquí.
93
94   :ref:`Documentation/process/changes.rst <changes>`
95     Este archivo proporciona una lista de los niveles mínimos de varios
96     paquetes que son necesarios para construir y ejecutar el kernel
97     exitosamente.
98
99   :ref:`Documentation/process/coding-style.rst <codingstyle>`
100     Esto describe el estilo de código del kernel de Linux y algunas de los
101     razones detrás de esto. Se espera que todo el código nuevo siga las
102     directrices de este documento. La mayoría de los maintainers solo
103     aceptarán parches si se siguen estas reglas, y muchas personas solo
104     revisan el código si tiene el estilo adecuado.
105
106   :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
107     Este archivo describe en gran detalle cómo crear con éxito y enviar un
108     parche, que incluye (pero no se limita a):
109
110        - Contenidos del correo electrónico (email)
111        - Formato del email
112        - A quien se debe enviar
113
114     Seguir estas reglas no garantiza el éxito (ya que todos los parches son
115     sujetos a escrutinio de contenido y estilo), pero en caso de no seguir
116     dichas reglas, el fracaso es prácticamente garantizado.
117     Otras excelentes descripciones de cómo crear parches correctamente son:
118
119         "The Perfect Patch"
120                 https://www.ozlabs.org/~akpm/stuff/tpp.txt
121
122         "Linux kernel patch submission format"
123                 https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html
124
125   :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>`
126     Este archivo describe la lógica detrás de la decisión consciente de
127     no tener una API estable dentro del kernel, incluidas cosas como:
128
129       - Capas intermedias del subsistema (por compatibilidad?)
130       - Portabilidad de drivers entre sistemas operativos
131       - Mitigar el cambio rápido dentro del árbol de fuentes del kernel (o
132         prevenir cambios rápidos)
133
134      Este documento es crucial para comprender la filosofía del desarrollo
135      de Linux y es muy importante para las personas que se mudan a Linux
136      tras desarrollar otros sistemas operativos.
137
138   :ref:`Documentation/process/security-bugs.rst <securitybugs>`
139     Si cree que ha encontrado un problema de seguridad en el kernel de
140     Linux, siga los pasos de este documento para ayudar a notificar a los
141     desarrolladores del kernel y ayudar a resolver el problema.
142
143   :ref:`Documentation/process/management-style.rst <managementstyle>`
144     Este documento describe cómo operan los maintainers del kernel de Linux
145     y los valores compartidos detrás de sus metodologías. Esta es una
146     lectura importante para cualquier persona nueva en el desarrollo del
147     kernel (o cualquier persona que simplemente sienta curiosidad por
148     el campo IT), ya que clarifica muchos conceptos erróneos y confusiones
149     comunes sobre el comportamiento único de los maintainers del kernel.
150
151   :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`
152     Este archivo describe las reglas sobre cómo se suceden las versiones
153     del kernel estable, y qué hacer si desea obtener un cambio en una de
154     estas publicaciones.
155
156   :ref:`Documentation/process/kernel-docs.rst <kernel_docs>`
157     Una lista de documentación externa relativa al desarrollo del kernel.
158     Por favor consulte esta lista si no encuentra lo que están buscando
159     dentro de la documentación del kernel.
160
161   :ref:`Documentation/process/applying-patches.rst <applying_patches>`
162     Una buena introducción que describe exactamente qué es un parche y cómo
163     aplicarlo a las diferentes ramas de desarrollo del kernel.
164
165 El kernel también tiene una gran cantidad de documentos que pueden ser
166 generados automáticamente desde el propio código fuente o desde
167 ReStructuredText markups (ReST), como este. Esto incluye un descripción
168 completa de la API en el kernel y reglas sobre cómo manejar cerrojos
169 (locking) correctamente.
170
171 Todos estos documentos se pueden generar como PDF o HTML ejecutando::
172
173         make pdfdocs
174         make htmldocs
175
176 respectivamente desde el directorio fuente principal del kernel.
177
178 Los documentos que utilizan el markup ReST se generarán en
179 Documentation/output. También se pueden generar en formatos LaTeX y ePub
180 con::
181
182         make latexdocs
183         make epubdocs
184
185 Convertirse en un/a desarrollador/a de kernel
186 ---------------------------------------------
187
188 Si no sabe nada sobre el desarrollo del kernel de Linux, debería consultar
189 el proyecto Linux KernelNewbies:
190
191         https://kernelnewbies.org
192
193 Consiste en una útil lista de correo donde puede preguntar casi cualquier
194 tipo de pregunta básica de desarrollo del kernel (asegúrese de buscar en
195 los archivos primero, antes de preguntar algo que ya ha sido respondido en
196 el pasado.) También tiene un canal IRC que puede usar para hacer preguntas
197 en tiempo real, y una gran cantidad de documentación útil para ir
198 aprendiendo sobre el desarrollo del kernel de Linux.
199
200 El sitio web tiene información básica sobre la organización del código,
201 subsistemas, y proyectos actuales (tanto dentro como fuera del árbol).
202 También describe alguna información logística básica, como cómo compilar
203 un kernel y aplicar un parche.
204
205 Si no sabe por dónde quiere empezar, pero quieres buscar alguna tarea que
206 comenzar a hacer para unirse a la comunidad de desarrollo del kernel,
207 acuda al proyecto Linux Kernel Janitor:
208
209         https://kernelnewbies.org/KernelJanitors
210
211 Es un gran lugar para comenzar. Describe una lista de problemas
212 relativamente simples que deben limpiarse y corregirse dentro del código
213 fuente del kernel de Linux árbol de fuentes. Trabajando con los
214 desarrolladores a cargo de este proyecto, aprenderá los conceptos básicos
215 para incluir su parche en el árbol del kernel de Linux, y posiblemente
216 descubrir en la dirección en que trabajar a continuación, si no tiene ya
217 una idea.
218
219 Antes de realizar cualquier modificación real al código del kernel de
220 Linux, es imperativo entender cómo funciona el código en cuestión. Para
221 este propósito, nada es mejor que leerlo directamente (lo más complicado
222 está bien comentado), tal vez incluso con la ayuda de herramientas
223 especializadas. Una de esas herramientas que se recomienda especialmente
224 es el proyecto Linux Cross-Reference, que es capaz de presentar el código
225 fuente en un formato de página web indexada y autorreferencial. Una
226 excelente puesta al día del repositorio del código del kernel se puede
227 encontrar en:
228
229         https://elixir.bootlin.com/
230
231 El proceso de desarrollo
232 ------------------------
233
234 El proceso de desarrollo del kernel de Linux consiste actualmente de
235 diferentes "branches" (ramas) con muchos distintos subsistemas específicos
236 a cada una de ellas. Las diferentes ramas son:
237
238   - El código principal de Linus (mainline tree)
239   - Varios árboles estables con múltiples major numbers
240   - Subsistemas específicos
241   - linux-next, para integración y testing
242
243 Mainline tree (Árbol principal)
244 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
245
246 El mainline tree es mantenido por Linus Torvalds, y puede encontrarse en
247 https://kernel.org o en su repo.  El proceso de desarrollo es el siguiente:
248
249   - Tan pronto como se lanza un nuevo kernel, se abre una ventana de dos
250     semanas, durante este período de tiempo, los maintainers pueden enviar
251     grandes modificaciones a Linus, por lo general los parches que ya se
252     han incluido en el linux-next durante unas semanas. La forma preferida
253     de enviar grandes cambios es usando git (la herramienta de
254     administración de código fuente del kernel, más información al respecto
255     en https://git-scm.com/), pero los parches simples también son validos.
256   - Después de dos semanas, se lanza un kernel -rc1 y la atención se centra
257     en hacer el kernel nuevo lo más estable ("solido") posible. La mayoría
258     de los parches en este punto deben arreglar una regresión. Los errores
259     que siempre han existido no son regresiones, por lo tanto, solo envíe
260     este tipo de correcciones si son importantes. Tenga en cuenta que se
261     podría aceptar un controlador (o sistema de archivos) completamente
262     nuevo después de -rc1 porque no hay riesgo de causar regresiones con
263     tal cambio, siempre y cuando el cambio sea autónomo y no afecte áreas
264     fuera del código que se está agregando. git se puede usar para enviar
265     parches a Linus después de que se lance -rc1, pero los parches también
266     deben ser enviado a una lista de correo pública para su revisión.
267   - Se lanza un nuevo -rc cada vez que Linus considera que el árbol git
268     actual esta en un estado razonablemente sano y adecuado para la prueba.
269     La meta es lanzar un nuevo kernel -rc cada semana.
270   - El proceso continúa hasta que el kernel se considera "listo", y esto
271     puede durar alrededor de 6 semanas.
272
273 Vale la pena mencionar lo que Andrew Morton escribió en las listas de
274 correo del kernel de Linux, sobre lanzamientos del kernel (traducido):
275
276         *"Nadie sabe cuándo se publicara un nuevo kernel, pues esto sucede
277         según el estado de los bugs, no de una cronología preconcebida."*
278
279 Varios árboles estables con múltiples major numbers
280 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
281
282 Los kernels con versiones de 3 partes son kernels estables. Estos contienen
283 correcciones relativamente pequeñas y críticas para problemas de seguridad
284 o importantes regresiones descubiertas para una publicación de código.
285 Cada lanzamiento en una gran serie estable incrementa la tercera parte de
286 la versión número, manteniendo las dos primeras partes iguales.
287
288 Esta es la rama recomendada para los usuarios que quieren la versión
289 estable más reciente del kernel, y no están interesados en ayudar a probar
290 versiones en desarrollo/experimentales.
291
292 Los árboles estables son mantenidos por el equipo "estable"
293 <stable@vger.kernel.org>, y se liberan (publican) según lo dicten las
294 necesidades. El período de liberación normal es de aproximadamente dos
295 semanas, pero puede ser más largo si no hay problemas apremiantes. Un
296 problema relacionado con la seguridad, en cambio, puede causar un
297 lanzamiento casi instantáneamente.
298
299 El archivo :ref:`Documentación/proceso/stable-kernel-rules.rst <stable_kernel_rules>`
300 en el árbol del kernel documenta qué tipos de cambios son aceptables para
301 el árbol estable y cómo funciona el proceso de lanzamiento.
302
303 Subsistemas específicos
304 ~~~~~~~~~~~~~~~~~~~~~~~~
305 Los maintainers de los diversos subsistemas del kernel --- y también muchos
306 desarrolladores de subsistemas del kernel --- exponen su estado actual de
307 desarrollo en repositorios fuente. De esta manera, otros pueden ver lo que
308 está sucediendo en las diferentes áreas del kernel. En áreas donde el
309 desarrollo es rápido, se le puede pedir a un desarrollador que base sus
310 envíos en tal árbol del subsistema del kernel, para evitar conflictos entre
311 este y otros trabajos ya en curso.
312
313 La mayoría de estos repositorios son árboles git, pero también hay otros
314 SCM en uso, o colas de parches que se publican como series quilt. Las
315 direcciones de estos repositorios de subsistemas se enumeran en el archivo
316 MAINTAINERS. Muchos de estos se pueden ver en https://git.kernel.org/.
317
318 Antes de que un parche propuesto se incluya con dicho árbol de subsistemas,
319 es sujeto a revisión, que ocurre principalmente en las listas de correo
320 (ver la sección respectiva a continuación). Para varios subsistemas del
321 kernel, esta revisión se rastrea con la herramienta patchwork. Patchwork
322 ofrece una interfaz web que muestra publicaciones de parches, cualquier
323 comentario sobre un parche o revisiones a él, y los maintainers pueden
324 marcar los parches como en revisión, aceptado, o rechazado. La mayoría de
325 estos sitios de trabajo de parches se enumeran en
326
327 https://patchwork.kernel.org/.
328
329 linux-next, para integración y testing
330 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
331
332 Antes de que las actualizaciones de los árboles de subsistemas se combinen
333 con el árbol principal, necesitan probar su integración. Para ello, existe
334 un repositorio especial de pruebas en el que se encuentran casi todos los
335 árboles de subsistema, actualizado casi a diario:
336
337         https://git.kernel.org/?p=linux/kernel/git/next/linux-next.git
338
339 De esta manera, linux-next ofrece una perspectiva resumida de lo que se
340 espera que entre en el kernel principal en el próximo período de "merge"
341 (fusión de código). Los testers aventureros son bienvenidos a probar
342 linux-next en ejecución.
343
344 Reportar bugs
345 -------------
346
347 El archivo 'Documentación/admin-guide/reporting-issues.rst' en el
348 directorio principal del kernel describe cómo informar un posible bug del
349 kernel y detalles sobre qué tipo de información necesitan los
350 desarrolladores del kernel para ayudar a rastrear la fuente del problema.
351
352 Gestión de informes de bugs
353 ------------------------------
354
355 Una de las mejores formas de poner en práctica sus habilidades de hacking
356 es arreglando errores reportados por otras personas. No solo ayudará a
357 hacer el kernel más estable, también aprenderá a solucionar problemas del
358 mundo real y mejora sus habilidades, y otros desarrolladores se darán
359 cuenta de tu presencia. La corrección de errores es una de las mejores
360 formas de ganar méritos entre desarrolladores, porque no a muchas personas
361 les gusta perder el tiempo arreglando los errores de otras personas.
362
363 Para trabajar en informes de errores ya reportados, busque un subsistema
364 que le interese. Verifique el archivo MAINTAINERS donde se informan los
365 errores de ese subsistema; con frecuencia será una lista de correo, rara
366 vez un rastreador de errores (bugtracker). Busque en los archivos de dicho
367 lugar para informes recientes y ayude donde lo crea conveniente. También es
368 posible que desee revisar https://bugzilla.kernel.org para informes de
369 errores; solo un puñado de subsistemas del kernel lo emplean activamente
370 para informar o rastrear; sin embargo, todos los errores para todo el kernel
371 se archivan allí.
372
373 Listas de correo
374 -----------------
375
376 Como se explica en algunos de los documentos anteriores, la mayoría de
377 desarrolladores del kernel participan en la lista de correo del kernel de
378 Linux. Detalles sobre cómo para suscribirse y darse de baja de la lista se
379 pueden encontrar en:
380
381         http://vger.kernel.org/vger-lists.html#linux-kernel
382
383 Existen archivos de la lista de correo en la web en muchos lugares
384 distintos. Utilice un motor de búsqueda para encontrar estos archivos. Por
385 ejemplo:
386
387         http://dir.gmane.org/gmane.linux.kernel
388
389 Es muy recomendable que busque en los archivos sobre el tema que desea
390 tratar, antes de publicarlo en la lista. Un montón de cosas ya discutidas
391 en detalle solo se registran en los archivos de la lista de correo.
392
393 La mayoría de los subsistemas individuales del kernel también tienen sus
394 propias lista de correo donde hacen sus esfuerzos de desarrollo. Revise el
395 archivo MAINTAINERS para obtener referencias de lo que estas listas para
396 los diferentes grupos.
397
398 Muchas de las listas están alojadas en kernel.org. La información sobre
399 estas puede ser encontrada en:
400
401         http://vger.kernel.org/vger-lists.html
402
403 Recuerde mantener buenos hábitos de comportamiento al usar las listas.
404 Aunque un poco cursi, la siguiente URL tiene algunas pautas simples para
405 interactuar con la lista (o cualquier lista):
406
407         http://www.albion.com/netiquette/
408
409 Si varias personas responden a su correo, el CC (lista de destinatarios)
410 puede hacerse bastante grande. No elimine a nadie de la lista CC: sin una
411 buena razón, o no responda solo a la dirección de la lista. Acostúmbrese
412 a recibir correos dos veces, una del remitente y otra de la lista, y no
413 intente ajustar esto agregando encabezados de correo astutos, a la gente no
414 le gustará.
415
416 Recuerde mantener intacto el contexto y la atribución de sus respuestas,
417 mantenga las líneas "El hacker John Kernel escribió ...:" en la parte
418 superior de su respuesta, y agregue sus declaraciones entre las secciones
419 individuales citadas en lugar de escribiendo en la parte superior del
420 correo electrónico.
421
422 Si incluye parches en su correo, asegúrese de que sean texto legible sin
423 formato como se indica en :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`.
424 Los desarrolladores del kernel no quieren lidiar con archivos adjuntos o
425 parches comprimidos; y pueden querer comentar líneas individuales de su
426 parche, que funciona sólo de esa manera. Asegúrese de emplear un programa
427 de correo que no altere los espacios ni los tabuladores. Una buena primera
428 prueba es enviarse el correo a usted mismo, e intentar aplicar su
429 propio parche. Si eso no funciona, arregle su programa de correo o
430 reemplace hasta que funcione.
431
432 Sobretodo, recuerde de ser respetuoso con otros subscriptores.
433
434 Colaborando con la comunidad
435 ----------------------------
436
437 El objetivo de la comunidad del kernel es proporcionar el mejor kernel
438 posible. Cuando envíe un parche para su aceptación, se revisará en sus
439 méritos técnicos solamente. Entonces, ¿qué deberías ser?
440
441   - críticas
442   - comentarios
443   - peticiones de cambios
444   - peticiones de justificaciones
445   - silencio
446
447 Recuerde, esto es parte de introducir su parche en el kernel. Tiene que ser
448 capaz de recibir críticas y comentarios sobre sus parches, evaluar
449 a nivel técnico y re-elaborar sus parches o proporcionar razonamiento claro
450 y conciso de por qué no se deben hacer tales cambios. Si no hay respuestas
451 a su publicación, espere unos días e intente de nuevo, a veces las cosas se
452 pierden dado el gran volumen.
453
454 ¿Qué no debería hacer?
455
456   - esperar que su parche se acepte sin preguntas
457   - actuar de forma defensiva
458   - ignorar comentarios
459   - enviar el parche de nuevo, sin haber aplicados los cambios pertinentes
460
461 En una comunidad que busca la mejor solución técnica posible, siempre habrá
462 diferentes opiniones sobre lo beneficioso que es un parche. Tiene que ser
463 cooperativo y estar dispuesto a adaptar su idea para que encaje dentro
464 del kernel, o al menos esté dispuesto a demostrar que su idea vale la pena.
465 Recuerde, estar equivocado es aceptable siempre y cuando estés dispuesto a
466 trabajar hacia una solución que sea correcta.
467
468 Es normal que las respuestas a su primer parche sean simplemente una lista
469 de una docena de cosas que debe corregir. Esto **no** implica que su
470 parche no será aceptado, y **no** es personal. Simplemente corrija todos
471 los problemas planteados en su parche, y envié otra vez.
472
473 Diferencias entre la comunidad kernel y las estructuras corporativas
474 --------------------------------------------------------------------
475
476 La comunidad del kernel funciona de manera diferente a la mayoría de los
477 entornos de desarrollo tradicionales en empresas. Aquí hay una lista de
478 cosas que puede intentar hacer para evitar problemas:
479
480   Cosas buenas que decir respecto a los cambios propuestos:
481
482     - "Esto arregla múltiples problemas."
483     - "Esto elimina 2000 lineas de código."
484     - "Aquí hay un parche que explica lo que intento describir."
485     - "Lo he testeado en 5 arquitecturas distintas..."
486     - "Aquí hay una serie de parches menores que..."
487     - "Esto mejora el rendimiento en maquinas típicas..."
488
489   Cosas negativas que debe evitar decir:
490
491     - "Lo hicimos así en AIX/ptx/Solaris, de modo que debe ser bueno..."
492     - "Llevo haciendo esto 20 años, de modo que..."
493     - "Esto lo necesita mi empresa para ganar dinero"
494     - "Esto es para la linea de nuestros productos Enterprise"
495     - "Aquí esta el documento de 1000 paginas describiendo mi idea"
496     - "Llevo 6 meses trabajando en esto..."
497     - "Aquí esta un parche de 5000 lineas que..."
498     - "He rescrito todo el desastre actual, y aquí esta..."
499     - "Tengo un deadline, y este parche debe aplicarse ahora."
500
501 Otra forma en que la comunidad del kernel es diferente a la mayoría de los
502 entornos de trabajo tradicionales en ingeniería de software, es la
503 naturaleza sin rostro de interacción. Una de las ventajas de utilizar el
504 correo electrónico y el IRC como formas principales de comunicación es la
505 no discriminación por motivos de género o raza. El entorno de trabajo del
506 kernel de Linux acepta a mujeres y minorías porque todo lo que eres es una
507 dirección de correo electrónico. El aspecto internacional también ayuda a
508 nivelar el campo de juego porque no puede adivinar el género basado en
509 el nombre de una persona. Un hombre puede llamarse Andrea y una mujer puede
510 llamarse Pat. La mayoría de las mujeres que han trabajado en el kernel de
511 Linux y han expresado una opinión han tenido experiencias positivas.
512
513 La barrera del idioma puede causar problemas a algunas personas que no se
514 sientes cómodas con el inglés. Un buen dominio del idioma puede ser
515 necesario para transmitir ideas correctamente en las listas de correo, por
516 lo que le recomendamos que revise sus correos electrónicos para asegurarse
517 de que tengan sentido en inglés antes de enviarlos.
518
519 Divida sus cambios
520 ---------------------
521
522 La comunidad del kernel de Linux no acepta con gusto grandes fragmentos de
523 código, sobretodo a la vez. Los cambios deben introducirse correctamente,
524 discutidos y divididos en pequeñas porciones individuales. Esto es casi
525 exactamente lo contrario de lo que las empresas están acostumbradas a hacer.
526 Su propuesta también debe introducirse muy temprano en el proceso de
527 desarrollo, de modo que pueda recibir comentarios sobre lo que está
528 haciendo. También deje que la comunidad sienta que está trabajando con
529 ellos, y no simplemente usándolos como un vertedero para su función. Sin
530 embargo, no envíe 50 correos electrónicos a una vez a una lista de correo,
531 su serie de parches debe casi siempre ser más pequeña que eso.
532
533 Las razones para dividir las cosas son las siguientes:
534
535 1) Los cambios pequeños aumentan la probabilidad de que sus parches sean
536    aplicados, ya que no requieren mucho tiempo o esfuerzo para verificar su
537    exactitud. Un parche de 5 líneas puede ser aplicado por un maintainer
538    con apenas una segunda mirada. Sin embargo, un parche de 500 líneas
539    puede tardar horas en ser revisado en términos de corrección (el tiempo
540    que toma es exponencialmente proporcional al tamaño del parche, o algo
541    así).
542
543    Los parches pequeños también facilitan la depuración cuando algo falla.
544    Es mucho más fácil retirar los parches uno por uno que diseccionar un
545    parche muy grande después de haber sido aplicado (y roto alguna cosa).
546
547 2) Es importante no solo enviar pequeños parches, sino también reescribir
548    y simplificar (o simplemente reordenar) los parches antes de enviarlos.
549
550 Esta es una analogía del desarrollador del kernel Al Viro (traducida):
551
552         *"Piense en un maestro que califica la tarea de un estudiante de
553         matemáticas. El maestro no quiere ver los intentos y errores del
554         estudiante antes de que se les ocurriera la solución. Quiere ver la
555         respuesta más limpia y elegante. Un buen estudiante lo sabe, y nunca
556         presentaría su trabajo intermedio antes de tener la solución final.*
557
558         *Lo mismo ocurre con el desarrollo del kernel. Los maintainers y
559         revisores no quieren ver el proceso de pensamiento detrás de la solución
560         al problema que se está resolviendo. Quieren ver un solución simple y
561         elegante."*
562
563 Puede resultar un reto mantener el equilibrio entre presentar una solución
564 elegante y trabajar junto a la comunidad, discutiendo su trabajo inacabado.
565 Por lo tanto, es bueno comenzar temprano en el proceso para obtener
566 "feedback" y mejorar su trabajo, pero también mantenga sus cambios en
567 pequeños trozos que pueden ser aceptados, incluso cuando toda su labor no
568 está listo para inclusión en un momento dado.
569
570 También tenga en cuenta que no es aceptable enviar parches para su
571 inclusión que están sin terminar y serán "arreglados más tarde".
572
573 Justifique sus cambios
574 ----------------------
575
576 Además de dividir sus parches, es muy importante que deje a la comunidad de
577 Linux sabe por qué deberían agregar este cambio. Nuevas características
578 debe justificarse como necesarias y útiles.
579
580 Documente sus cambios
581 ---------------------
582
583 Cuando envíe sus parches, preste especial atención a lo que dice en el
584 texto de su correo electrónico. Esta información se convertirá en el
585 ChangeLog del parche, y se conservará para que todos la vean, todo el
586 tiempo. Debe describir el parche por completo y contener:
587
588   - por qué los cambios son necesarios
589   - el diseño general de su propuesta
590   - detalles de implementación
591   - resultados de sus experimentos
592
593 Para obtener más detalles sobre cómo debería quedar todo esto, consulte la
594 sección ChangeLog del documento:
595
596   "The Perfect Patch"
597       https://www.ozlabs.org/~akpm/stuff/tpp.txt
598
599 Todas estas cuestiones son a veces son muy difíciles de conseguir. Puede
600 llevar años perfeccionar estas prácticas (si es que lo hace). Es un proceso
601 continuo de mejora que requiere mucha paciencia y determinación. Pero no se
602 rinda, es posible. Muchos lo han hecho antes, y cada uno tuvo que comenzar
603 exactamente donde está usted ahora.
604
605 ----------
606
607 Gracias a Paolo Ciarrocchi que permitió que la sección "Development Process"
608 se basara en el texto que había escrito (https://lwn.net/Articles/94386/),
609 y a Randy Dunlap y Gerrit Huizenga por algunas de la lista de cosas que
610 debes y no debes decir. También gracias a Pat Mochel, Hanna Linder, Randy
611 Dunlap, Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook,
612 Andrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk,
613 Keri Harris, Frans Pop, David A. Wheeler, Junio Hamano, Michael Kerrisk y
614 Alex Shepard por su revisión, comentarios y contribuciones. Sin su ayuda,
615 este documento no hubiera sido posible.
616
617 Maintainer: Greg Kroah-Hartman <greg@kroah.com>