1.. include:: ../disclaimer-sp.rst
2
3:Original: Documentation/process/5.Posting.rst
4:Translator: Carlos Bilbao <[email protected]> and Avadhut Naik <[email protected]>
5
6.. _sp_development_posting:
7
8Publicación de parches
9======================
10
11Tarde o temprano, llega el momento en que su trabajo esté listo para ser
12presentado a la comunidad para su revisión y, eventualmente, su inclusión
13en el kernel mainline. Como era de esperar, la comunidad de desarrollo del
14kernel ha desarrollado un conjunto de convenciones y procedimientos que se
15utilizan en la publicación de parches; seguirlos hará la vida mucho más
16fácil para todos los involucrados. Este documento intentará cubrir estas
17expectativas con un detalle razonable; también se puede encontrar más
18información en los archivos.
19:ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>`
20and :ref:`Documentation/translations/sp_SP/process/submit-checklist.rst <sp_submitchecklist>`
21
22Cuando publicar
23---------------
24
25Hay una tentación constante de evitar publicar parches antes de que
26estén completamente “listos”. Para parches simples, eso no es un
27problema. Sin embargo, si el trabajo que se está realizando es complejo,
28hay mucho que ganar al obtener comentarios de la comunidad antes de que
29se complete el trabajo. Por lo tanto, se debería considerar publicar
30trabajo en progreso, o incluso poner a disposición un árbol de git para
31que los desarrolladores interesados puedan ponerse al día con su trabajo
32en cualquier momento.
33
34Al publicar código que aún no se considera listo para su inclusión, es
35una buena idea decirlo en la propia publicación. Además, mencione
36cualquier trabajo importante que aún falte por hacer y cualquier problema
37conocido. Menos personas mirarán los parches que se sabe que están a
38medias, pero aquellos que lo hagan vendrán con la idea de que pueden
39ayudarlo a llevar el trabajo en la dirección correcta.
40
41Antes de crear parches
42----------------------
43
44Se deben hacer varias cosas antes de considerar enviar parches a la
45comunidad de desarrollo. Estas incluyen:
46
47 - Pruebe el código en la medida de lo posible. Utilice las herramientas
48   de depuración del kernel, asegúrese de que el kernel se compilará con
49   todas las combinaciones razonables de opciones de configuración, use
50   compiladores cruzados para compilar para diferentes arquitecturas, etc.
51
52 - Asegúrese de que su código cumpla con las directrices de estilo de
53   codificación del kernel.
54
55 - ¿Su cambio tiene implicaciones de rendimiento? Si es así, debe ejecutar
56   puntos de referencia que muestren cuál es el impacto (o beneficio) de
57   su cambio; se debe incluir un resumen de los resultados con el parche.
58
59 - Asegúrese de que tiene derecho a publicar el código. Si este trabajo
60   se realizó para un empleador, es probable que el empleador tenga
61   derecho al trabajo y debe estar de acuerdo con su lanzamiento bajo la
62   GPL.
63
64Como regla general, pensar un poco más antes de publicar el código casi
65siempre compensa el esfuerzo en poco tiempo.
66
67Preparación del parche
68----------------------
69
70La preparación de parches para su publicación puede ser una cantidad
71sorprendente de trabajo, pero, una vez más, intentar ahorrar tiempo aquí
72generalmente no es recomendable, ni siquiera a corto plazo.
73
74Los parches deben prepararse contra una versión específica del kernel.
75Como regla general, un parche debe basarse en el mainline actual que se
76encuentra en el árbol git de Linus. Al basarse en el mainline, comience
77con un punto de lanzamiento bien conocido, una versión estable o -rc, en
78lugar de bifurcarse fuera del mainline en un punto arbitrario.
79
80Puede ser necesario hacer revisiones contra -mm, linux-next o un árbol de
81subsistemas para facilitar pruebas y revisiones más amplias. Dependiendo
82del área de su parche y de lo que esté sucediendo en otros lugares, basar
83un parche en estos otros árboles puede requerir una cantidad significativa
84de trabajo para resolver conflictos y lidiar con los cambios de API.
85
86Solo los cambios más simples deben formatearse como un solo parche; todo
87lo demás debe hacerse como una serie lógica de cambios. Dividir parches
88es un poco un arte; algunos desarrolladores pasan mucho tiempo averiguando
89cómo hacerlo de la manera que la comunidad espera. Sin embargo, hay
90algunas reglas generales que pueden ayudar considerablemente:
91
92 - La serie de parches que publique casi seguramente no será la serie de
93   cambios que se encuentran en su sistema de control de revisiones. En su
94   lugar, los cambios que ha realizado deben considerarse en su forma
95   final y luego dividirse de manera que tengan sentido. A los
96   desarrolladores les interesan los cambios discretos y autónomos, no el
97   camino que tomó para llegar a esos cambios.
98
99 - Cada cambio lógicamente independiente debe formatearse como un parche
100   separado. Estos cambios pueden ser pequeños (“agregar un campo a esta
101   estructura”) o grandes (agregar un nuevo controlador significativo,
102   por ejemplo), pero deben ser conceptualmente pequeños y susceptibles
103   de una descripción de una línea. Cada parche debe hacer un cambio
104   especifico que pueda ser revisado por sí mismo y verificado para hacer
105   lo que dice que hace.
106
107 - Para reafirmar la pauta anterior: no mezcle diferentes tipos de cambios
108   en el mismo parche. Si un solo parche corrige un error de seguridad
109   crítico, reorganiza algunas estructuras y reformatea el código, es muy
110   probable que se pase por alto y se pierda la solución importante.
111
112 - Cada parche debe producir un kernel que se compile y funcione
113   correctamente; si su serie de parches se interrumpe en el medio, el
114   resultado debería seguir siendo un kernel funcional. La aplicación
115   parcial de una serie de parches es un escenario común cuando se
116   utiliza la herramienta “git bisect” para encontrar regresiones; si
117   el resultado es un kernel roto, hará la vida más difícil para los
118   desarrolladores y usuarios que participan en el noble trabajo de
119   rastrear problemas.
120
121 - Sin embargo, no lo exagere. Un desarrollador una vez publicó un conjunto
122   de ediciones en un solo archivo como 500 parches separados – un acto
123   que no lo convirtió en la persona más popular en la lista de correo del
124   kernel. Un solo parche puede ser razonablemente grande si todavía
125   contiene un solo cambio *lógico*.
126
127 - Puede ser tentador agregar una infraestructura completamente nueva con
128   una serie de parches, pero dejar esa infraestructura sin usar hasta el
129   parche final de la serie lo habilite todo. Esta tentación debe evitarse
130   si es posible; si esa serie agrega regresiones, bisection señalará el
131   ultimo parche como el que causó el problema, aunque el error real esté
132   en otra parte. Siempre que sea posible, un parche que agregue código
133   nuevo debe hacer que ese código se active de inmediato.
134
135Trabajar para crear la serie de parches perfecta puede ser un proceso
136frustrante que lleva mucho tiempo y reflexión después de que el “trabajo
137real” se ha hecho. Sin embargo, cuando se hace correctamente, es un tiempo
138bien empleado.
139
140Formato de parches y registros de cambios
141-----------------------------------------
142
143Así que ahora tiene una serie perfecta de parches para publicar, pero el
144trabajo aún no se ha hecho. Cada parche necesita ser formateado en un
145mensaje que comunique rápida y claramente su propósito al resto del
146mundo. A tal fin, cada parche se compondrá de lo siguiente:
147
148 - Una línea opcional “From” que nombra al autor del parche. Esta línea
149   solo es necesaria si pasa el parche de otra persona por correo
150   electrónico, pero nunca está de más agregarla en caso de duda.
151
152 - Una descripción de una línea de lo que hace el parche. Este mensaje
153   debería ser suficiente para que un lector que lo vea sin otro contexto
154   pueda entender el alcance del parche; la línea aparecerá en los
155   registros de cambios de “forma corta”. Este mensaje generalmente se
156   formatea con el nombre del subsistema relevante primero, seguido del
157   propósito del parche. Por ejemplo:
158
159   ::
160
161	gpio: fix build on CONFIG_GPIO_SYSFS=n
162
163 - Una línea en blanco seguida de una descripción detallada del contenido
164   del parche. Esta descripción puede ser tan larga como sea necesario;
165   debería decir qué hace el parche y por qué debe aplicarse al kernel.
166
167 - Una o más líneas de etiquetas, con, como mínimo, una línea
168   Signed-off-by: del autor del parche. Las etiquetas se describirán con
169   más detalle a continuación.
170
171Los elementos de arriba, juntos, forman el registro de cambios para el
172parche. Escribir buenos registros de cambios es un arte crucial, pero a
173menudo descuidado; vale la pena pasar otro momento discutiendo este tema.
174Al escribir un registro de cambios, debe recordar que muchas personas
175diferentes leerán sus palabras. Estos incluyen a los maintainers y
176revisores de subsistemas que necesitan decidir si el parche debe
177incluirse, a los distribuidores y otros maintainers que intentan
178determinar si un parche debe ser “backported” a otros kernels, a los
179cazadores de errores que se preguntan si el parche es responsable de un
180problema que están persiguiendo, a los usuarios que quieren saber cómo
181ha cambiado el kernel, y más. Un buen registro de cambios transmite la
182información necesaria a todas estas personas de la forma más directa y
183concisa posible.
184
185Con ese fin, la línea de resumen debe describir los efectos y la
186motivación del cambio, así como lo mejor posible dada la restricción de
187una línea. La descripción detallada puede ampliar esos temas y
188proporcionar cualquier información adicional necesaria. Si el parche
189corrige un error, cita el commit que introdujo el error si es posible (y
190por favor, proporcione tanto el ID del commit como el título al citar
191commits). Si un problema está asociado con un registro específico o la
192salida del compilador, incluya esa salida para ayudar a otros usuarios a
193buscar una solución al mismo problema. Si el cambio está destinado a
194apoyar otros cambios que llegarán en un parche posterior, dígalo. Si se
195cambian las API internas, detalle esos cambios y cómo deben responder
196otros desarrolladores. En general, cuanto más pueda ponerse en los zapatos
197de todos los que leerán su registro de cambios, mejor será ese registro de
198cambios (y el kernel en su conjunto).
199
200No hace falta decir que el registro de cambios debe ser el texto utilizado
201al realizar el commit en un sistema de control de revisiones. Será seguido
202por:
203
204 - El parche, en el formato unificado de parche (“-u”). Usar la opción
205   “-p” en diff asociará los nombres de las funciones con los cambios, lo
206   que hará que el parche resultante sea más fácil de leer para otros.
207
208Debe evitar incluir cambios en archivos irrelevantes (los generados por
209el proceso de compilación, por ejemplo, o los archivos de respaldo del
210editor) en el parche. El archivo “dontdiff” en el directorio de
211Documentation puede ayudar en este sentido; páselo a diff con la
212opción “-X”.
213
214Las etiquetas ya mencionadas brevemente anteriormente proporcionan
215información sobre cómo surgió el parche. Se describen en detalle en el
216documento
217:ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>`;
218lo que sigue aquí es un breve resumen.
219
220Una etiqueta se usa para referirse a commits anteriores que introdujeron
221problemas corregidos por el parche::
222
223	Fixes: 1f2e3d4c5b6a ("La primera línea del commit especificada por los primeros 12 caracteres de su ID SHA-1.")
224
225Otra etiqueta se utiliza para vincular páginas web con información
226adicional o detalles, por ejemplo, una discusión previa que condujo al
227parche o un documento con una especificación implementada por el parche::
228
229	Link: https://example.com/somewhere.html  otras cosas opcionales
230
231Muchos maintainers, al aplicar un parche, también agregan esta etiqueta
232para vincular a la última publicación de revisión pública del parche; a
233menudo, eso se hace automáticamente mediante herramientas como b4 o git
234hook como el que se describe en
235'Documentation/maintainer/configure-git.rst'.
236
237Si la URL apunta a un informe de error público que está siendo corregido
238por el parche, use la etiqueta “Closes:” (Cierra) en su lugar::
239
240	Closes: https://example.com/issues/1234  otras cosas opcionales
241
242Algunos rastreadores de errores tienen la capacidad de cerrar problemas
243automáticamente cuando se aplica un commit con tal etiqueta. Algunos bots
244que monitorean listas de correo también pueden rastrear dichas etiquetas
245y realizar ciertas acciones. Los rastreadores de errores privados y las
246URL no válidas están prohibidos.
247
248Otro tipo de etiqueta se utiliza para documentar quién estuvo involucrado
249en el desarrollo del parche. Cada uno de estos utiliza este formato::
250
251	tag: Full Name <email address>  otras cosas opcionales
252
253Las etiquetas de uso común son:
254
255 - Signed-off-by: esta es una certificación del desarrollador de que él
256   o ella tiene el derecho de enviar el parche para su inclusión en el
257   kernel. Es un acuerdo con el Certificado de Origen del Desarrollador,
258   que se encuentra en
259   :ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>`.
260   El código sin la firma adecuada no se puede fusionar en el mainline.
261
262 - Co-developed-by: indica que el parche fue co-creado por varios
263   desarrolladores; se utiliza para atribuir a los coautores (además del
264   autor atribuido por la etiqueta From:) cuando varias personas trabajan
265   en un solo parche. Cada Co-developed-by: debe ir seguido inmediatamente
266   por un Signedoff-by: del coautor asociado. Los detalles y ejemplos se
267   pueden encontrar en
268   :ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>`.
269
270 - Acked-by: indica un acuerdo por parte de otro desarrollador (a menudo
271   un maintainer del código relevante) de que el parche es apropiado para
272   su inclusión en el kernel.
273
274 - Tested-by: indica que la persona nombrada ha probado el parche y ha
275   encontrado que funciona.
276
277 - Reviewed-by: el desarrollador nombrado ha revisado el parche para
278   verificar que sea correcto; consulte la declaración del revisor en
279   :ref:`Documentation/translations/sp_SP/process/submitting-patches.rst <sp_submittingpatches>`
280   para obtener más detalles.
281
282 - Reported-by: nombra a un usuario que informó un problema que se
283   soluciona con este parche; esta etiqueta se utiliza para dar crédito
284   a las personas (a menudo infravalorada) que prueban nuestro código y
285   nos hacen saber cuándo las cosas no funcionan correctamente. Tenga en
286   cuenta que esta etiqueta debe ir seguida de una etiqueta Closes: que
287   apunte al informe, a menos que el informe no esté disponible en la
288   web. La etiqueta Link: se puede usar en lugar de Closes: si el parche
289   corrige una parte de los problemas reportados.
290
291 - Cc: la persona nombrada recibió una copia del parche y tuvo la
292   oportunidad de comentar sobre él.
293
294Tenga cuidado al agregar etiquetas a sus parches, ya que solo Cc: es
295apropiado para la adición sin el permiso explícito de la persona nombrada;
296usar Reported-by: está casi bien en su mayoría, pero pida permiso si el
297error fue reportado en privado.
298
299Envió del parche
300----------------
301
302Antes de enviar sus parches por correo, hay un par de cosas más de las
303que debe ocuparse:
304
305 - ¿Está seguro de que su correo no corromperá los parches? Los parches
306   con cambios gratuitos de espacio en blanco o ajuste de línea
307   realizados por el cliente de correo no se aplicarán en el otro
308   extremo, y a menudo, no se examinarán en detalle. Si tiene alguna
309   duda, envíese el parche por correo y convénzase de que parece
310   intacto.
311
312   :ref:`Documentation/translations/sp_SP/process/email-clients.rst <sp_email_clients>`
313   tiene algunos consejos útiles sobre cómo hacer que clientes de correo
314   específicos funcionen para enviar parches.
315
316 - ¿Está seguro de que su parche está libre de errores tontos? Siempre
317   debe ejecutar parches a través de scripts/checkpatch.pl y abordar las
318   quejas que surjan. Por favor, tenga en cuenta que checkpatch.pl, aunque
319   es la encarnación de una buena cantidad de pensamiento sobre cómo
320   deberían ser los parches del kernel, no es más inteligente que usted.
321   Si corregir una queja de checkpatch.pl empeoraría el código, no lo
322   haga.
323
324Los parches siempre deben enviarse como texto sin formato. Por favor, no
325los envíe como archivos adjuntos; eso hace que sea mucho más difícil para
326los revisores citar secciones del parche en sus respuestas. En su lugar,
327simplemente coloca el parche directamente en su mensaje.
328
329Al enviar parches por correo, es importante enviar copias a cualquier
330persona que pueda estar interesada en ellos. A diferencia de otros
331proyectos, el kernel anima a la gente a equivocarse por el lado de enviar
332demasiadas copias; no asuma que las personas relevantes verán su
333publicación en las listas de correo. En particular, las copias deben
334ir a:
335
336 - El (los) maintainer(s) del (de los) subsistema(s) afectado(s). Como se
337   describió anteriormente, el archivo MAINTAINERS es el primer lugar para
338   buscar a estas personas.
339
340 - Otros desarrolladores que han estado trabajando en la misma
341   área – especialmente aquellos que podrían estar trabajando allí ahora.
342   Usar git para ver quién más ha modificado los archivos en los que está
343   trabajando puede ser útil.
344
345 - Si está respondiendo a un informe de error o a una solicitud de
346   función, copie también al autor.
347
348 - Envié una copia a la lista de correo relevante o, si no se aplica nada
349   más, a la lista de linux-kernel.
350
351 - Si está corrigiendo un error, piense si la corrección debe incluirse en
352   la próxima actualización estable. Si es así, [email protected]
353   debería obtener una copia del parche. También agregue un
354   "Cc: [email protected]" a las etiquetas dentro del parche; eso
355   hará que el equipo estable reciba una notificación cuando su solución
356   incluya en el mainline.
357
358Al seleccionar destinatarios para un parche, es bueno saber quién cree que
359eventualmente aceptará el parche y lo fusionará. Aunque es posible enviar
360parches directamente a Linus Torvalds y hacer que los fusione, las cosas
361normalmente no se hacen de esa manera. Linus está ocupado y hay
362maintainers de subsistemas que vigilan partes específicas del kernel.
363Generalmente, querrá que ese maintainer fusione sus parches. Andrew Morton
364es a menudo el objetivo del parche de último recurso si no hay un
365maintainer obvio.
366
367Los parches necesitan buenas líneas de asunto. El formato canónico de una
368línea de parche es algo así como:
369
370::
371
372	[PATCH nn/mm] subsys: descripción en una línea del parche
373
374donde “nn” es el número ordinal del parche, “”mm” es el número total de
375parches en la serie, y “subsys” es el nombre del subsistema afectado.
376Claramente, nn/mm se puede omitir para un parche único e independiente.
377
378Si tiene una serie significativa de parches, es costumbre enviar una
379descripción introductoria como parte cero. Sin embargo, esta convención no
380se sigue universalmente; si la utiliza, recuerde que la información en la
381introducción no se incluye en los registros de cambios del kernel. Por lo
382tanto, asegúrese de que los parches, en sí mismos, tengan información
383completa del registro de cambios.
384
385En general, la segunda y las siguientes partes de un parche de varias
386partes deben enviarse como una respuesta a la primera parte para que todas
387se hilen juntas en el extremo receptor. Herramientas como git y quilt
388tienen comandos para enviar por correo un conjunto de parches con el
389subproceso adecuado. Sin embargo, si tiene una serie larga y está usando
390git, por favor evite la opción –chain-reply-to para evitar crear un
391anidamiento excepcionalmente profundo.
392