A veces cuando se descarga el código fuente de un programa puede ser necesario cambiar algunas cosas para hacerlo funcionar: el código está obsoleto y necesita cambios, algunas librerías se encuentran en otro lado, errores en el código. O también puede ser necesario agregarle/remover código para funcione mas rápido, tenga nuevas funciones, mayores optimizaciones, etc.
Para ello se usa un parche, que es un archivo que contiene información de lo que se debe cambiar al archivo original para que quede a como se modificó previamente por otra persona (o uno mismo). Así que en vez de que cada persona que desea modificar de la misma manera el código deba abrir cada archivo, buscar las líneas donde se mete el código nuevo, borrar lo necesario y guardar; se les da el parche que realiza esta tarea de manera automatizada. Esto es usado por ejemplo por algunos empaquetadores que deben modificar el código fuente de un programa para que cumpla el estándar ó funcione como lo pide su distribución, para enviar cambios código fuente a un proyecto de software, entre otras cosas.
Por ejemplo, existen modificaciones no oficiales que se la hacen al kernel linux para agregarle nuevas funcionalidades, nuevas optimizaciones de velocidad, soporte para algunos dispositivos (ejem: el hardware del PS3), entre muchas cosas. Pero para ello, no es necesario hacer copias de todo el código fuente para cada modificación hecha: por ejemplo, el sitio kernel.org no tiene que colocar el todo código fuente de linux modificado para funcionar mejor en escritorio, todo el código fuente del kernel para el ps3, el código fuente para correr en una plataforma no soportado, sino sólo ofrecer el código fuente original y los «programadores/empaquetadores/geeks» se encargarán de aplicar un parche para modificar el archivo original agregando los cambios necesario para su propósito.
Los pasos a seguir para crear un parche se hace con solo 1 comando, primero modificamos el programa de acuerdo a nuestras necesidades en una carpeta/archivo aparte (para no perder el original), y utilizamos el programa diff para ver la diferencia entre el archivo original y el nuevo (modificado). Usamos el siguiente comando para guardar la información de cambios en un archivo/directorio en un archivo patch:
# se pueden usar directorios para modificaciones múltiples de archivos
diff -Naur dir_archivo_original archivo_nuevo > parche.patch
Con esto ya se tiene guardado en el archivo parche.patch la información acerca de los cambios realizados y donde se encuentran los mismos. Ahora la persona que recibe o quiere usar el parche para cambiar el código fuente original por lo que necesita sólo debe hacer:
# se puede usar un directorio en vez de archivo a modificar
patch -Np1 -i ruta_archivo_parche ruta_archivo_a_modificar
¡Y listo! De esta manera es como se recomienda enviar cambios de un código, ya que la persona no tiene que leer todo el código para encontrar los cambios (el mismo parche te dice donde se han realizado) y puede aplicar los cambios si lo desea y sin perder el original.
Nota: Disculpen, creo que lo escribí un poco confuso.