162306a36Sopenharmony_ci.. include:: ./disclaimer-sp.rst 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/howto.rst <process_howto>` 462306a36Sopenharmony_ci:Translator: Carlos Bilbao <carlos.bilbao@amd.com> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci.. _sp_process_howto: 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciCómo participar en el desarrollo del kernel de Linux 962306a36Sopenharmony_ci==================================================== 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ciEste documento es el principal punto de partida. Contiene instrucciones 1262306a36Sopenharmony_cisobre cómo convertirse en desarrollador del kernel de Linux y explica cómo 1362306a36Sopenharmony_citrabajar con el y en su desarrollo. El documento no tratará ningún aspecto 1462306a36Sopenharmony_citécnico relacionado con la programación del kernel, pero le ayudará 1562306a36Sopenharmony_ciguiándole por el camino correcto. 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ciSi algo en este documento quedara obsoleto, envíe parches al maintainer de 1862306a36Sopenharmony_cieste archivo, que se encuentra en la parte superior del documento. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciIntroducción 2162306a36Sopenharmony_ci------------ 2262306a36Sopenharmony_ci¿De modo que quiere descubrir como convertirse en un/a desarrollador/a del 2362306a36Sopenharmony_cikernel de Linux? Tal vez su jefe le haya dicho, "Escriba un driver de 2462306a36Sopenharmony_ciLinux para este dispositivo." El objetivo de este documento en enseñarle 2562306a36Sopenharmony_citodo cuanto necesita para conseguir esto, describiendo el proceso por el 2662306a36Sopenharmony_cique debe pasar, y con indicaciones de como trabajar con la comunidad. 2762306a36Sopenharmony_ciTambién trata de explicar las razones por las cuales la comunidad trabaja 2862306a36Sopenharmony_cide la forma en que lo hace. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciEl kernel esta principalmente escrito en C, con algunas partes que son 3162306a36Sopenharmony_cidependientes de la arquitectura en ensamblador. Un buen conocimiento de C 3262306a36Sopenharmony_cies necesario para desarrollar en el kernel. Lenguaje ensamblador (en 3362306a36Sopenharmony_cicualquier arquitectura) no es necesario excepto que planee realizar 3462306a36Sopenharmony_cidesarrollo de bajo nivel para dicha arquitectura. Aunque no es un perfecto 3562306a36Sopenharmony_cisustituto para una educación sólida en C y/o años de experiencia, los 3662306a36Sopenharmony_cisiguientes libros sirven, como mínimo, como referencia: 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci- "The C Programming Language" de Kernighan e Ritchie [Prentice Hall] 3962306a36Sopenharmony_ci- "Practical C Programming" de Steve Oualline [O'Reilly] 4062306a36Sopenharmony_ci- "C: A Reference Manual" de Harbison and Steele [Prentice Hall] 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciEl kernel está escrito usando GNU C y la cadena de herramientas GNU. Si 4362306a36Sopenharmony_cibien se adhiere al estándar ISO C89, utiliza una serie de extensiones que 4462306a36Sopenharmony_cino aparecen en dicho estándar. El kernel usa un C independiente de entorno, 4562306a36Sopenharmony_cisin depender de la biblioteca C estándar, por lo que algunas partes del 4662306a36Sopenharmony_ciestándar C no son compatibles. Divisiones de long long arbitrarios o 4762306a36Sopenharmony_cide coma flotante no son permitidas. En ocasiones, puede ser difícil de 4862306a36Sopenharmony_cientender las suposiciones que el kernel hace respecto a la cadena de 4962306a36Sopenharmony_ciherramientas y las extensiones que usa, y desafortunadamente no hay 5062306a36Sopenharmony_cireferencia definitiva para estas. Consulte las páginas de información de 5162306a36Sopenharmony_cigcc (`info gcc`) para obtener información al respecto. 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciRecuerde que está tratando de aprender a trabajar con una comunidad de 5462306a36Sopenharmony_cidesarrollo existente. Es un grupo diverso de personas, con altos estándares 5562306a36Sopenharmony_cide código, estilo y procedimiento. Estas normas han sido creadas a lo 5662306a36Sopenharmony_cilargo del tiempo en función de lo que se ha encontrado que funciona mejor 5762306a36Sopenharmony_cipara un equipo tan grande y geográficamente disperso. Trate de aprender 5862306a36Sopenharmony_citanto como le sea posible acerca de estos estándares antes de tiempo, ya 5962306a36Sopenharmony_cique están bien documentados; no espere que la gente se adapte a usted o a 6062306a36Sopenharmony_cila forma de hacer las cosas en su empresa. 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciCuestiones legales 6362306a36Sopenharmony_ci------------------ 6462306a36Sopenharmony_ciEl código fuente del kernel de Linux se publica bajo licencia GPL. Por 6562306a36Sopenharmony_cifavor, revise el archivo COPYING, presente en la carpeta principal del 6662306a36Sopenharmony_cicódigo fuente, para detalles de la licencia. Si tiene alguna otra pregunta 6762306a36Sopenharmony_cisobre licencias, contacte a un abogado, no pregunte en listas de discusión 6862306a36Sopenharmony_cidel kernel de Linux. La gente en estas listas no son abogadas, y no debe 6962306a36Sopenharmony_ciconfiar en sus opiniones en materia legal. 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciPara preguntas y respuestas más frecuentes sobre la licencia GPL, consulte: 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci https://www.gnu.org/licenses/gpl-faq.html 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciDocumentación 7662306a36Sopenharmony_ci-------------- 7762306a36Sopenharmony_ciEl código fuente del kernel de Linux tiene una gran variedad de documentos 7862306a36Sopenharmony_cique son increíblemente valiosos para aprender a interactuar con la 7962306a36Sopenharmony_cicomunidad del kernel. Cuando se agregan nuevas funciones al kernel, se 8062306a36Sopenharmony_cirecomienda que se incluyan nuevos archivos de documentación que expliquen 8162306a36Sopenharmony_cicómo usar la función. Cuando un cambio en el kernel hace que la interfaz 8262306a36Sopenharmony_cique el kernel expone espacio de usuario cambie, se recomienda que envíe la 8362306a36Sopenharmony_ciinformación o un parche en las páginas del manual que expliquen el cambio 8462306a36Sopenharmony_cia mtk.manpages@gmail.com, y CC la lista linux-api@vger.kernel.org. 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ciEsta es la lista de archivos que están en el código fuente del kernel y son 8762306a36Sopenharmony_cide obligada lectura: 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci :ref:`Documentation/admin-guide/README.rst <readme>` 9062306a36Sopenharmony_ci Este archivo ofrece una breve descripción del kernel de Linux y 9162306a36Sopenharmony_ci describe lo que es necesario hacer para configurar y compilar el 9262306a36Sopenharmony_ci kernel. Quienes sean nuevos en el kernel deben comenzar aquí. 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci :ref:`Documentation/process/changes.rst <changes>` 9562306a36Sopenharmony_ci Este archivo proporciona una lista de los niveles mínimos de varios 9662306a36Sopenharmony_ci paquetes que son necesarios para construir y ejecutar el kernel 9762306a36Sopenharmony_ci exitosamente. 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci :ref:`Documentation/process/coding-style.rst <codingstyle>` 10062306a36Sopenharmony_ci Esto describe el estilo de código del kernel de Linux y algunas de los 10162306a36Sopenharmony_ci razones detrás de esto. Se espera que todo el código nuevo siga las 10262306a36Sopenharmony_ci directrices de este documento. La mayoría de los maintainers solo 10362306a36Sopenharmony_ci aceptarán parches si se siguen estas reglas, y muchas personas solo 10462306a36Sopenharmony_ci revisan el código si tiene el estilo adecuado. 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 10762306a36Sopenharmony_ci Este archivo describe en gran detalle cómo crear con éxito y enviar un 10862306a36Sopenharmony_ci parche, que incluye (pero no se limita a): 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci - Contenidos del correo electrónico (email) 11162306a36Sopenharmony_ci - Formato del email 11262306a36Sopenharmony_ci - A quien se debe enviar 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci Seguir estas reglas no garantiza el éxito (ya que todos los parches son 11562306a36Sopenharmony_ci sujetos a escrutinio de contenido y estilo), pero en caso de no seguir 11662306a36Sopenharmony_ci dichas reglas, el fracaso es prácticamente garantizado. 11762306a36Sopenharmony_ci Otras excelentes descripciones de cómo crear parches correctamente son: 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci "The Perfect Patch" 12062306a36Sopenharmony_ci https://www.ozlabs.org/~akpm/stuff/tpp.txt 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci "Linux kernel patch submission format" 12362306a36Sopenharmony_ci https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>` 12662306a36Sopenharmony_ci Este archivo describe la lógica detrás de la decisión consciente de 12762306a36Sopenharmony_ci no tener una API estable dentro del kernel, incluidas cosas como: 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci - Capas intermedias del subsistema (por compatibilidad?) 13062306a36Sopenharmony_ci - Portabilidad de drivers entre sistemas operativos 13162306a36Sopenharmony_ci - Mitigar el cambio rápido dentro del árbol de fuentes del kernel (o 13262306a36Sopenharmony_ci prevenir cambios rápidos) 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci Este documento es crucial para comprender la filosofía del desarrollo 13562306a36Sopenharmony_ci de Linux y es muy importante para las personas que se mudan a Linux 13662306a36Sopenharmony_ci tras desarrollar otros sistemas operativos. 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci :ref:`Documentation/process/security-bugs.rst <securitybugs>` 13962306a36Sopenharmony_ci Si cree que ha encontrado un problema de seguridad en el kernel de 14062306a36Sopenharmony_ci Linux, siga los pasos de este documento para ayudar a notificar a los 14162306a36Sopenharmony_ci desarrolladores del kernel y ayudar a resolver el problema. 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci :ref:`Documentation/process/management-style.rst <managementstyle>` 14462306a36Sopenharmony_ci Este documento describe cómo operan los maintainers del kernel de Linux 14562306a36Sopenharmony_ci y los valores compartidos detrás de sus metodologías. Esta es una 14662306a36Sopenharmony_ci lectura importante para cualquier persona nueva en el desarrollo del 14762306a36Sopenharmony_ci kernel (o cualquier persona que simplemente sienta curiosidad por 14862306a36Sopenharmony_ci el campo IT), ya que clarifica muchos conceptos erróneos y confusiones 14962306a36Sopenharmony_ci comunes sobre el comportamiento único de los maintainers del kernel. 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>` 15262306a36Sopenharmony_ci Este archivo describe las reglas sobre cómo se suceden las versiones 15362306a36Sopenharmony_ci del kernel estable, y qué hacer si desea obtener un cambio en una de 15462306a36Sopenharmony_ci estas publicaciones. 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci :ref:`Documentation/process/kernel-docs.rst <kernel_docs>` 15762306a36Sopenharmony_ci Una lista de documentación externa relativa al desarrollo del kernel. 15862306a36Sopenharmony_ci Por favor consulte esta lista si no encuentra lo que están buscando 15962306a36Sopenharmony_ci dentro de la documentación del kernel. 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci :ref:`Documentation/process/applying-patches.rst <applying_patches>` 16262306a36Sopenharmony_ci Una buena introducción que describe exactamente qué es un parche y cómo 16362306a36Sopenharmony_ci aplicarlo a las diferentes ramas de desarrollo del kernel. 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ciEl kernel también tiene una gran cantidad de documentos que pueden ser 16662306a36Sopenharmony_cigenerados automáticamente desde el propio código fuente o desde 16762306a36Sopenharmony_ciReStructuredText markups (ReST), como este. Esto incluye un descripción 16862306a36Sopenharmony_cicompleta de la API en el kernel y reglas sobre cómo manejar cerrojos 16962306a36Sopenharmony_ci(locking) correctamente. 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ciTodos estos documentos se pueden generar como PDF o HTML ejecutando:: 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci make pdfdocs 17462306a36Sopenharmony_ci make htmldocs 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_cirespectivamente desde el directorio fuente principal del kernel. 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ciLos documentos que utilizan el markup ReST se generarán en 17962306a36Sopenharmony_ciDocumentation/output. También se pueden generar en formatos LaTeX y ePub 18062306a36Sopenharmony_cicon:: 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci make latexdocs 18362306a36Sopenharmony_ci make epubdocs 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ciConvertirse en un/a desarrollador/a de kernel 18662306a36Sopenharmony_ci--------------------------------------------- 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ciSi no sabe nada sobre el desarrollo del kernel de Linux, debería consultar 18962306a36Sopenharmony_ciel proyecto Linux KernelNewbies: 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci https://kernelnewbies.org 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ciConsiste en una útil lista de correo donde puede preguntar casi cualquier 19462306a36Sopenharmony_citipo de pregunta básica de desarrollo del kernel (asegúrese de buscar en 19562306a36Sopenharmony_cilos archivos primero, antes de preguntar algo que ya ha sido respondido en 19662306a36Sopenharmony_ciel pasado.) También tiene un canal IRC que puede usar para hacer preguntas 19762306a36Sopenharmony_cien tiempo real, y una gran cantidad de documentación útil para ir 19862306a36Sopenharmony_ciaprendiendo sobre el desarrollo del kernel de Linux. 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ciEl sitio web tiene información básica sobre la organización del código, 20162306a36Sopenharmony_cisubsistemas, y proyectos actuales (tanto dentro como fuera del árbol). 20262306a36Sopenharmony_ciTambién describe alguna información logística básica, como cómo compilar 20362306a36Sopenharmony_ciun kernel y aplicar un parche. 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ciSi no sabe por dónde quiere empezar, pero quieres buscar alguna tarea que 20662306a36Sopenharmony_cicomenzar a hacer para unirse a la comunidad de desarrollo del kernel, 20762306a36Sopenharmony_ciacuda al proyecto Linux Kernel Janitor: 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci https://kernelnewbies.org/KernelJanitors 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ciEs un gran lugar para comenzar. Describe una lista de problemas 21262306a36Sopenharmony_cirelativamente simples que deben limpiarse y corregirse dentro del código 21362306a36Sopenharmony_cifuente del kernel de Linux árbol de fuentes. Trabajando con los 21462306a36Sopenharmony_cidesarrolladores a cargo de este proyecto, aprenderá los conceptos básicos 21562306a36Sopenharmony_cipara incluir su parche en el árbol del kernel de Linux, y posiblemente 21662306a36Sopenharmony_cidescubrir en la dirección en que trabajar a continuación, si no tiene ya 21762306a36Sopenharmony_ciuna idea. 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ciAntes de realizar cualquier modificación real al código del kernel de 22062306a36Sopenharmony_ciLinux, es imperativo entender cómo funciona el código en cuestión. Para 22162306a36Sopenharmony_cieste propósito, nada es mejor que leerlo directamente (lo más complicado 22262306a36Sopenharmony_ciestá bien comentado), tal vez incluso con la ayuda de herramientas 22362306a36Sopenharmony_ciespecializadas. Una de esas herramientas que se recomienda especialmente 22462306a36Sopenharmony_cies el proyecto Linux Cross-Reference, que es capaz de presentar el código 22562306a36Sopenharmony_cifuente en un formato de página web indexada y autorreferencial. Una 22662306a36Sopenharmony_ciexcelente puesta al día del repositorio del código del kernel se puede 22762306a36Sopenharmony_ciencontrar en: 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci https://elixir.bootlin.com/ 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ciEl proceso de desarrollo 23262306a36Sopenharmony_ci------------------------ 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ciEl proceso de desarrollo del kernel de Linux consiste actualmente de 23562306a36Sopenharmony_cidiferentes "branches" (ramas) con muchos distintos subsistemas específicos 23662306a36Sopenharmony_cia cada una de ellas. Las diferentes ramas son: 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci - El código principal de Linus (mainline tree) 23962306a36Sopenharmony_ci - Varios árboles estables con múltiples major numbers 24062306a36Sopenharmony_ci - Subsistemas específicos 24162306a36Sopenharmony_ci - linux-next, para integración y testing 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ciMainline tree (Árbol principal) 24462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ciEl mainline tree es mantenido por Linus Torvalds, y puede encontrarse en 24762306a36Sopenharmony_cihttps://kernel.org o en su repo. El proceso de desarrollo es el siguiente: 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci - Tan pronto como se lanza un nuevo kernel, se abre una ventana de dos 25062306a36Sopenharmony_ci semanas, durante este período de tiempo, los maintainers pueden enviar 25162306a36Sopenharmony_ci grandes modificaciones a Linus, por lo general los parches que ya se 25262306a36Sopenharmony_ci han incluido en el linux-next durante unas semanas. La forma preferida 25362306a36Sopenharmony_ci de enviar grandes cambios es usando git (la herramienta de 25462306a36Sopenharmony_ci administración de código fuente del kernel, más información al respecto 25562306a36Sopenharmony_ci en https://git-scm.com/), pero los parches simples también son validos. 25662306a36Sopenharmony_ci - Después de dos semanas, se lanza un kernel -rc1 y la atención se centra 25762306a36Sopenharmony_ci en hacer el kernel nuevo lo más estable ("solido") posible. La mayoría 25862306a36Sopenharmony_ci de los parches en este punto deben arreglar una regresión. Los errores 25962306a36Sopenharmony_ci que siempre han existido no son regresiones, por lo tanto, solo envíe 26062306a36Sopenharmony_ci este tipo de correcciones si son importantes. Tenga en cuenta que se 26162306a36Sopenharmony_ci podría aceptar un controlador (o sistema de archivos) completamente 26262306a36Sopenharmony_ci nuevo después de -rc1 porque no hay riesgo de causar regresiones con 26362306a36Sopenharmony_ci tal cambio, siempre y cuando el cambio sea autónomo y no afecte áreas 26462306a36Sopenharmony_ci fuera del código que se está agregando. git se puede usar para enviar 26562306a36Sopenharmony_ci parches a Linus después de que se lance -rc1, pero los parches también 26662306a36Sopenharmony_ci deben ser enviado a una lista de correo pública para su revisión. 26762306a36Sopenharmony_ci - Se lanza un nuevo -rc cada vez que Linus considera que el árbol git 26862306a36Sopenharmony_ci actual esta en un estado razonablemente sano y adecuado para la prueba. 26962306a36Sopenharmony_ci La meta es lanzar un nuevo kernel -rc cada semana. 27062306a36Sopenharmony_ci - El proceso continúa hasta que el kernel se considera "listo", y esto 27162306a36Sopenharmony_ci puede durar alrededor de 6 semanas. 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ciVale la pena mencionar lo que Andrew Morton escribió en las listas de 27462306a36Sopenharmony_cicorreo del kernel de Linux, sobre lanzamientos del kernel (traducido): 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci *"Nadie sabe cuándo se publicara un nuevo kernel, pues esto sucede 27762306a36Sopenharmony_ci según el estado de los bugs, no de una cronología preconcebida."* 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ciVarios árboles estables con múltiples major numbers 28062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ciLos kernels con versiones de 3 partes son kernels estables. Estos contienen 28362306a36Sopenharmony_cicorrecciones relativamente pequeñas y críticas para problemas de seguridad 28462306a36Sopenharmony_cio importantes regresiones descubiertas para una publicación de código. 28562306a36Sopenharmony_ciCada lanzamiento en una gran serie estable incrementa la tercera parte de 28662306a36Sopenharmony_cila versión número, manteniendo las dos primeras partes iguales. 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ciEsta es la rama recomendada para los usuarios que quieren la versión 28962306a36Sopenharmony_ciestable más reciente del kernel, y no están interesados en ayudar a probar 29062306a36Sopenharmony_civersiones en desarrollo/experimentales. 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ciLos árboles estables son mantenidos por el equipo "estable" 29362306a36Sopenharmony_ci<stable@vger.kernel.org>, y se liberan (publican) según lo dicten las 29462306a36Sopenharmony_cinecesidades. El período de liberación normal es de aproximadamente dos 29562306a36Sopenharmony_cisemanas, pero puede ser más largo si no hay problemas apremiantes. Un 29662306a36Sopenharmony_ciproblema relacionado con la seguridad, en cambio, puede causar un 29762306a36Sopenharmony_cilanzamiento casi instantáneamente. 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ciEl archivo :ref:`Documentación/proceso/stable-kernel-rules.rst <stable_kernel_rules>` 30062306a36Sopenharmony_cien el árbol del kernel documenta qué tipos de cambios son aceptables para 30162306a36Sopenharmony_ciel árbol estable y cómo funciona el proceso de lanzamiento. 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ciSubsistemas específicos 30462306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~ 30562306a36Sopenharmony_ciLos maintainers de los diversos subsistemas del kernel --- y también muchos 30662306a36Sopenharmony_cidesarrolladores de subsistemas del kernel --- exponen su estado actual de 30762306a36Sopenharmony_cidesarrollo en repositorios fuente. De esta manera, otros pueden ver lo que 30862306a36Sopenharmony_ciestá sucediendo en las diferentes áreas del kernel. En áreas donde el 30962306a36Sopenharmony_cidesarrollo es rápido, se le puede pedir a un desarrollador que base sus 31062306a36Sopenharmony_cienvíos en tal árbol del subsistema del kernel, para evitar conflictos entre 31162306a36Sopenharmony_cieste y otros trabajos ya en curso. 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ciLa mayoría de estos repositorios son árboles git, pero también hay otros 31462306a36Sopenharmony_ciSCM en uso, o colas de parches que se publican como series quilt. Las 31562306a36Sopenharmony_cidirecciones de estos repositorios de subsistemas se enumeran en el archivo 31662306a36Sopenharmony_ciMAINTAINERS. Muchos de estos se pueden ver en https://git.kernel.org/. 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ciAntes de que un parche propuesto se incluya con dicho árbol de subsistemas, 31962306a36Sopenharmony_cies sujeto a revisión, que ocurre principalmente en las listas de correo 32062306a36Sopenharmony_ci(ver la sección respectiva a continuación). Para varios subsistemas del 32162306a36Sopenharmony_cikernel, esta revisión se rastrea con la herramienta patchwork. Patchwork 32262306a36Sopenharmony_ciofrece una interfaz web que muestra publicaciones de parches, cualquier 32362306a36Sopenharmony_cicomentario sobre un parche o revisiones a él, y los maintainers pueden 32462306a36Sopenharmony_cimarcar los parches como en revisión, aceptado, o rechazado. La mayoría de 32562306a36Sopenharmony_ciestos sitios de trabajo de parches se enumeran en 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_cihttps://patchwork.kernel.org/. 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_cilinux-next, para integración y testing 33062306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ciAntes de que las actualizaciones de los árboles de subsistemas se combinen 33362306a36Sopenharmony_cicon el árbol principal, necesitan probar su integración. Para ello, existe 33462306a36Sopenharmony_ciun repositorio especial de pruebas en el que se encuentran casi todos los 33562306a36Sopenharmony_ciárboles de subsistema, actualizado casi a diario: 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ci https://git.kernel.org/?p=linux/kernel/git/next/linux-next.git 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ciDe esta manera, linux-next ofrece una perspectiva resumida de lo que se 34062306a36Sopenharmony_ciespera que entre en el kernel principal en el próximo período de "merge" 34162306a36Sopenharmony_ci(fusión de código). Los testers aventureros son bienvenidos a probar 34262306a36Sopenharmony_cilinux-next en ejecución. 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ciReportar bugs 34562306a36Sopenharmony_ci------------- 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ciEl archivo 'Documentación/admin-guide/reporting-issues.rst' en el 34862306a36Sopenharmony_cidirectorio principal del kernel describe cómo informar un posible bug del 34962306a36Sopenharmony_cikernel y detalles sobre qué tipo de información necesitan los 35062306a36Sopenharmony_cidesarrolladores del kernel para ayudar a rastrear la fuente del problema. 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ciGestión de informes de bugs 35362306a36Sopenharmony_ci------------------------------ 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ciUna de las mejores formas de poner en práctica sus habilidades de hacking 35662306a36Sopenharmony_cies arreglando errores reportados por otras personas. No solo ayudará a 35762306a36Sopenharmony_cihacer el kernel más estable, también aprenderá a solucionar problemas del 35862306a36Sopenharmony_cimundo real y mejora sus habilidades, y otros desarrolladores se darán 35962306a36Sopenharmony_cicuenta de tu presencia. La corrección de errores es una de las mejores 36062306a36Sopenharmony_ciformas de ganar méritos entre desarrolladores, porque no a muchas personas 36162306a36Sopenharmony_ciles gusta perder el tiempo arreglando los errores de otras personas. 36262306a36Sopenharmony_ci 36362306a36Sopenharmony_ciPara trabajar en informes de errores ya reportados, busque un subsistema 36462306a36Sopenharmony_cique le interese. Verifique el archivo MAINTAINERS donde se informan los 36562306a36Sopenharmony_cierrores de ese subsistema; con frecuencia será una lista de correo, rara 36662306a36Sopenharmony_civez un rastreador de errores (bugtracker). Busque en los archivos de dicho 36762306a36Sopenharmony_cilugar para informes recientes y ayude donde lo crea conveniente. También es 36862306a36Sopenharmony_ciposible que desee revisar https://bugzilla.kernel.org para informes de 36962306a36Sopenharmony_cierrores; solo un puñado de subsistemas del kernel lo emplean activamente 37062306a36Sopenharmony_cipara informar o rastrear; sin embargo, todos los errores para todo el kernel 37162306a36Sopenharmony_cise archivan allí. 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ciListas de correo 37462306a36Sopenharmony_ci----------------- 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ciComo se explica en algunos de los documentos anteriores, la mayoría de 37762306a36Sopenharmony_cidesarrolladores del kernel participan en la lista de correo del kernel de 37862306a36Sopenharmony_ciLinux. Detalles sobre cómo para suscribirse y darse de baja de la lista se 37962306a36Sopenharmony_cipueden encontrar en: 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_ci http://vger.kernel.org/vger-lists.html#linux-kernel 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ciExisten archivos de la lista de correo en la web en muchos lugares 38462306a36Sopenharmony_cidistintos. Utilice un motor de búsqueda para encontrar estos archivos. Por 38562306a36Sopenharmony_ciejemplo: 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ci http://dir.gmane.org/gmane.linux.kernel 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ciEs muy recomendable que busque en los archivos sobre el tema que desea 39062306a36Sopenharmony_citratar, antes de publicarlo en la lista. Un montón de cosas ya discutidas 39162306a36Sopenharmony_cien detalle solo se registran en los archivos de la lista de correo. 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ciLa mayoría de los subsistemas individuales del kernel también tienen sus 39462306a36Sopenharmony_cipropias lista de correo donde hacen sus esfuerzos de desarrollo. Revise el 39562306a36Sopenharmony_ciarchivo MAINTAINERS para obtener referencias de lo que estas listas para 39662306a36Sopenharmony_cilos diferentes grupos. 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ciMuchas de las listas están alojadas en kernel.org. La información sobre 39962306a36Sopenharmony_ciestas puede ser encontrada en: 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci http://vger.kernel.org/vger-lists.html 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ciRecuerde mantener buenos hábitos de comportamiento al usar las listas. 40462306a36Sopenharmony_ciAunque un poco cursi, la siguiente URL tiene algunas pautas simples para 40562306a36Sopenharmony_ciinteractuar con la lista (o cualquier lista): 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_ci http://www.albion.com/netiquette/ 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ciSi varias personas responden a su correo, el CC (lista de destinatarios) 41062306a36Sopenharmony_cipuede hacerse bastante grande. No elimine a nadie de la lista CC: sin una 41162306a36Sopenharmony_cibuena razón, o no responda solo a la dirección de la lista. Acostúmbrese 41262306a36Sopenharmony_cia recibir correos dos veces, una del remitente y otra de la lista, y no 41362306a36Sopenharmony_ciintente ajustar esto agregando encabezados de correo astutos, a la gente no 41462306a36Sopenharmony_cile gustará. 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_ciRecuerde mantener intacto el contexto y la atribución de sus respuestas, 41762306a36Sopenharmony_cimantenga las líneas "El hacker John Kernel escribió ...:" en la parte 41862306a36Sopenharmony_cisuperior de su respuesta, y agregue sus declaraciones entre las secciones 41962306a36Sopenharmony_ciindividuales citadas en lugar de escribiendo en la parte superior del 42062306a36Sopenharmony_cicorreo electrónico. 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ciSi incluye parches en su correo, asegúrese de que sean texto legible sin 42362306a36Sopenharmony_ciformato como se indica en :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`. 42462306a36Sopenharmony_ciLos desarrolladores del kernel no quieren lidiar con archivos adjuntos o 42562306a36Sopenharmony_ciparches comprimidos; y pueden querer comentar líneas individuales de su 42662306a36Sopenharmony_ciparche, que funciona sólo de esa manera. Asegúrese de emplear un programa 42762306a36Sopenharmony_cide correo que no altere los espacios ni los tabuladores. Una buena primera 42862306a36Sopenharmony_ciprueba es enviarse el correo a usted mismo, e intentar aplicar su 42962306a36Sopenharmony_cipropio parche. Si eso no funciona, arregle su programa de correo o 43062306a36Sopenharmony_cireemplace hasta que funcione. 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ciSobretodo, recuerde de ser respetuoso con otros subscriptores. 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ciColaborando con la comunidad 43562306a36Sopenharmony_ci---------------------------- 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ciEl objetivo de la comunidad del kernel es proporcionar el mejor kernel 43862306a36Sopenharmony_ciposible. Cuando envíe un parche para su aceptación, se revisará en sus 43962306a36Sopenharmony_ciméritos técnicos solamente. Entonces, ¿qué deberías ser? 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ci - críticas 44262306a36Sopenharmony_ci - comentarios 44362306a36Sopenharmony_ci - peticiones de cambios 44462306a36Sopenharmony_ci - peticiones de justificaciones 44562306a36Sopenharmony_ci - silencio 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ciRecuerde, esto es parte de introducir su parche en el kernel. Tiene que ser 44862306a36Sopenharmony_cicapaz de recibir críticas y comentarios sobre sus parches, evaluar 44962306a36Sopenharmony_cia nivel técnico y re-elaborar sus parches o proporcionar razonamiento claro 45062306a36Sopenharmony_ciy conciso de por qué no se deben hacer tales cambios. Si no hay respuestas 45162306a36Sopenharmony_cia su publicación, espere unos días e intente de nuevo, a veces las cosas se 45262306a36Sopenharmony_cipierden dado el gran volumen. 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci¿Qué no debería hacer? 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ci - esperar que su parche se acepte sin preguntas 45762306a36Sopenharmony_ci - actuar de forma defensiva 45862306a36Sopenharmony_ci - ignorar comentarios 45962306a36Sopenharmony_ci - enviar el parche de nuevo, sin haber aplicados los cambios pertinentes 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ciEn una comunidad que busca la mejor solución técnica posible, siempre habrá 46262306a36Sopenharmony_cidiferentes opiniones sobre lo beneficioso que es un parche. Tiene que ser 46362306a36Sopenharmony_cicooperativo y estar dispuesto a adaptar su idea para que encaje dentro 46462306a36Sopenharmony_cidel kernel, o al menos esté dispuesto a demostrar que su idea vale la pena. 46562306a36Sopenharmony_ciRecuerde, estar equivocado es aceptable siempre y cuando estés dispuesto a 46662306a36Sopenharmony_citrabajar hacia una solución que sea correcta. 46762306a36Sopenharmony_ci 46862306a36Sopenharmony_ciEs normal que las respuestas a su primer parche sean simplemente una lista 46962306a36Sopenharmony_cide una docena de cosas que debe corregir. Esto **no** implica que su 47062306a36Sopenharmony_ciparche no será aceptado, y **no** es personal. Simplemente corrija todos 47162306a36Sopenharmony_cilos problemas planteados en su parche, y envié otra vez. 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ciDiferencias entre la comunidad kernel y las estructuras corporativas 47462306a36Sopenharmony_ci-------------------------------------------------------------------- 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ciLa comunidad del kernel funciona de manera diferente a la mayoría de los 47762306a36Sopenharmony_cientornos de desarrollo tradicionales en empresas. Aquí hay una lista de 47862306a36Sopenharmony_cicosas que puede intentar hacer para evitar problemas: 47962306a36Sopenharmony_ci 48062306a36Sopenharmony_ci Cosas buenas que decir respecto a los cambios propuestos: 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci - "Esto arregla múltiples problemas." 48362306a36Sopenharmony_ci - "Esto elimina 2000 lineas de código." 48462306a36Sopenharmony_ci - "Aquí hay un parche que explica lo que intento describir." 48562306a36Sopenharmony_ci - "Lo he testeado en 5 arquitecturas distintas..." 48662306a36Sopenharmony_ci - "Aquí hay una serie de parches menores que..." 48762306a36Sopenharmony_ci - "Esto mejora el rendimiento en maquinas típicas..." 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci Cosas negativas que debe evitar decir: 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci - "Lo hicimos así en AIX/ptx/Solaris, de modo que debe ser bueno..." 49262306a36Sopenharmony_ci - "Llevo haciendo esto 20 años, de modo que..." 49362306a36Sopenharmony_ci - "Esto lo necesita mi empresa para ganar dinero" 49462306a36Sopenharmony_ci - "Esto es para la linea de nuestros productos Enterprise" 49562306a36Sopenharmony_ci - "Aquí esta el documento de 1000 paginas describiendo mi idea" 49662306a36Sopenharmony_ci - "Llevo 6 meses trabajando en esto..." 49762306a36Sopenharmony_ci - "Aquí esta un parche de 5000 lineas que..." 49862306a36Sopenharmony_ci - "He rescrito todo el desastre actual, y aquí esta..." 49962306a36Sopenharmony_ci - "Tengo un deadline, y este parche debe aplicarse ahora." 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ciOtra forma en que la comunidad del kernel es diferente a la mayoría de los 50262306a36Sopenharmony_cientornos de trabajo tradicionales en ingeniería de software, es la 50362306a36Sopenharmony_cinaturaleza sin rostro de interacción. Una de las ventajas de utilizar el 50462306a36Sopenharmony_cicorreo electrónico y el IRC como formas principales de comunicación es la 50562306a36Sopenharmony_cino discriminación por motivos de género o raza. El entorno de trabajo del 50662306a36Sopenharmony_cikernel de Linux acepta a mujeres y minorías porque todo lo que eres es una 50762306a36Sopenharmony_cidirección de correo electrónico. El aspecto internacional también ayuda a 50862306a36Sopenharmony_cinivelar el campo de juego porque no puede adivinar el género basado en 50962306a36Sopenharmony_ciel nombre de una persona. Un hombre puede llamarse Andrea y una mujer puede 51062306a36Sopenharmony_cillamarse Pat. La mayoría de las mujeres que han trabajado en el kernel de 51162306a36Sopenharmony_ciLinux y han expresado una opinión han tenido experiencias positivas. 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ciLa barrera del idioma puede causar problemas a algunas personas que no se 51462306a36Sopenharmony_cisientes cómodas con el inglés. Un buen dominio del idioma puede ser 51562306a36Sopenharmony_cinecesario para transmitir ideas correctamente en las listas de correo, por 51662306a36Sopenharmony_cilo que le recomendamos que revise sus correos electrónicos para asegurarse 51762306a36Sopenharmony_cide que tengan sentido en inglés antes de enviarlos. 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_ciDivida sus cambios 52062306a36Sopenharmony_ci--------------------- 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ciLa comunidad del kernel de Linux no acepta con gusto grandes fragmentos de 52362306a36Sopenharmony_cicódigo, sobretodo a la vez. Los cambios deben introducirse correctamente, 52462306a36Sopenharmony_cidiscutidos y divididos en pequeñas porciones individuales. Esto es casi 52562306a36Sopenharmony_ciexactamente lo contrario de lo que las empresas están acostumbradas a hacer. 52662306a36Sopenharmony_ciSu propuesta también debe introducirse muy temprano en el proceso de 52762306a36Sopenharmony_cidesarrollo, de modo que pueda recibir comentarios sobre lo que está 52862306a36Sopenharmony_cihaciendo. También deje que la comunidad sienta que está trabajando con 52962306a36Sopenharmony_ciellos, y no simplemente usándolos como un vertedero para su función. Sin 53062306a36Sopenharmony_ciembargo, no envíe 50 correos electrónicos a una vez a una lista de correo, 53162306a36Sopenharmony_cisu serie de parches debe casi siempre ser más pequeña que eso. 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_ciLas razones para dividir las cosas son las siguientes: 53462306a36Sopenharmony_ci 53562306a36Sopenharmony_ci1) Los cambios pequeños aumentan la probabilidad de que sus parches sean 53662306a36Sopenharmony_ci aplicados, ya que no requieren mucho tiempo o esfuerzo para verificar su 53762306a36Sopenharmony_ci exactitud. Un parche de 5 líneas puede ser aplicado por un maintainer 53862306a36Sopenharmony_ci con apenas una segunda mirada. Sin embargo, un parche de 500 líneas 53962306a36Sopenharmony_ci puede tardar horas en ser revisado en términos de corrección (el tiempo 54062306a36Sopenharmony_ci que toma es exponencialmente proporcional al tamaño del parche, o algo 54162306a36Sopenharmony_ci así). 54262306a36Sopenharmony_ci 54362306a36Sopenharmony_ci Los parches pequeños también facilitan la depuración cuando algo falla. 54462306a36Sopenharmony_ci Es mucho más fácil retirar los parches uno por uno que diseccionar un 54562306a36Sopenharmony_ci parche muy grande después de haber sido aplicado (y roto alguna cosa). 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci2) Es importante no solo enviar pequeños parches, sino también reescribir 54862306a36Sopenharmony_ci y simplificar (o simplemente reordenar) los parches antes de enviarlos. 54962306a36Sopenharmony_ci 55062306a36Sopenharmony_ciEsta es una analogía del desarrollador del kernel Al Viro (traducida): 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ci *"Piense en un maestro que califica la tarea de un estudiante de 55362306a36Sopenharmony_ci matemáticas. El maestro no quiere ver los intentos y errores del 55462306a36Sopenharmony_ci estudiante antes de que se les ocurriera la solución. Quiere ver la 55562306a36Sopenharmony_ci respuesta más limpia y elegante. Un buen estudiante lo sabe, y nunca 55662306a36Sopenharmony_ci presentaría su trabajo intermedio antes de tener la solución final.* 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci *Lo mismo ocurre con el desarrollo del kernel. Los maintainers y 55962306a36Sopenharmony_ci revisores no quieren ver el proceso de pensamiento detrás de la solución 56062306a36Sopenharmony_ci al problema que se está resolviendo. Quieren ver un solución simple y 56162306a36Sopenharmony_ci elegante."* 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ciPuede resultar un reto mantener el equilibrio entre presentar una solución 56462306a36Sopenharmony_cielegante y trabajar junto a la comunidad, discutiendo su trabajo inacabado. 56562306a36Sopenharmony_ciPor lo tanto, es bueno comenzar temprano en el proceso para obtener 56662306a36Sopenharmony_ci"feedback" y mejorar su trabajo, pero también mantenga sus cambios en 56762306a36Sopenharmony_cipequeños trozos que pueden ser aceptados, incluso cuando toda su labor no 56862306a36Sopenharmony_ciestá listo para inclusión en un momento dado. 56962306a36Sopenharmony_ci 57062306a36Sopenharmony_ciTambién tenga en cuenta que no es aceptable enviar parches para su 57162306a36Sopenharmony_ciinclusión que están sin terminar y serán "arreglados más tarde". 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ciJustifique sus cambios 57462306a36Sopenharmony_ci---------------------- 57562306a36Sopenharmony_ci 57662306a36Sopenharmony_ciAdemás de dividir sus parches, es muy importante que deje a la comunidad de 57762306a36Sopenharmony_ciLinux sabe por qué deberían agregar este cambio. Nuevas características 57862306a36Sopenharmony_cidebe justificarse como necesarias y útiles. 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_ciDocumente sus cambios 58162306a36Sopenharmony_ci--------------------- 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_ciCuando envíe sus parches, preste especial atención a lo que dice en el 58462306a36Sopenharmony_citexto de su correo electrónico. Esta información se convertirá en el 58562306a36Sopenharmony_ciChangeLog del parche, y se conservará para que todos la vean, todo el 58662306a36Sopenharmony_citiempo. Debe describir el parche por completo y contener: 58762306a36Sopenharmony_ci 58862306a36Sopenharmony_ci - por qué los cambios son necesarios 58962306a36Sopenharmony_ci - el diseño general de su propuesta 59062306a36Sopenharmony_ci - detalles de implementación 59162306a36Sopenharmony_ci - resultados de sus experimentos 59262306a36Sopenharmony_ci 59362306a36Sopenharmony_ciPara obtener más detalles sobre cómo debería quedar todo esto, consulte la 59462306a36Sopenharmony_cisección ChangeLog del documento: 59562306a36Sopenharmony_ci 59662306a36Sopenharmony_ci "The Perfect Patch" 59762306a36Sopenharmony_ci https://www.ozlabs.org/~akpm/stuff/tpp.txt 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ciTodas estas cuestiones son a veces son muy difíciles de conseguir. Puede 60062306a36Sopenharmony_cillevar años perfeccionar estas prácticas (si es que lo hace). Es un proceso 60162306a36Sopenharmony_cicontinuo de mejora que requiere mucha paciencia y determinación. Pero no se 60262306a36Sopenharmony_cirinda, es posible. Muchos lo han hecho antes, y cada uno tuvo que comenzar 60362306a36Sopenharmony_ciexactamente donde está usted ahora. 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci---------- 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ciGracias a Paolo Ciarrocchi que permitió que la sección "Development Process" 60862306a36Sopenharmony_cise basara en el texto que había escrito (https://lwn.net/Articles/94386/), 60962306a36Sopenharmony_ciy a Randy Dunlap y Gerrit Huizenga por algunas de la lista de cosas que 61062306a36Sopenharmony_cidebes y no debes decir. También gracias a Pat Mochel, Hanna Linder, Randy 61162306a36Sopenharmony_ciDunlap, Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, 61262306a36Sopenharmony_ciAndrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk, 61362306a36Sopenharmony_ciKeri Harris, Frans Pop, David A. Wheeler, Junio Hamano, Michael Kerrisk y 61462306a36Sopenharmony_ciAlex Shepard por su revisión, comentarios y contribuciones. Sin su ayuda, 61562306a36Sopenharmony_cieste documento no hubiera sido posible. 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ciMaintainer: Greg Kroah-Hartman <greg@kroah.com> 618