¿Existe un código fuente disponible para el comando de parche en Linux?

¿Existe un código fuente disponible para el comando de parche en Linux?

Estoy buscando un código fuente para el comando de parche utilizado en Linux. ¿Alguien sabe si hay alguno disponible?

Estoy buscando algo que sea compatible con POSIX o más específicamente con QNX v7.

Respuesta1

Existen varias implementaciones de patchcomando en el mercado, busyboxpor ejemplo, viene con la suya propia. Probablemente estés buscando el código fuente patchque viene con tu sistema. Para encontrar el código fuente tienes que saber lo que estás buscando. Debe verificar qué paquete proporciona patchel comando y dónde está el flujo ascendente. No especificaste qué sistema operativo usas, pero en Debian puedes hacer:

root@64ee32ea5ee6:/# dpkg -S "$(command -v patch)"
patch: /usr/bin/patch
root@64ee32ea5ee6:/# dpkg -s patch
Package: patch
Status: install ok installed
Priority: standard
Section: vcs
Installed-Size: 238
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Version: 2.7.6-2ubuntu1.1
Depends: libc6 (>= 2.17)
Suggests: ed, diffutils-doc
Description: Apply a diff file to an original
 Patch will take a patch file containing any of the four forms
 of difference listing produced by the diff program and apply
 those differences to an original file, producing a patched
 version.
Homepage: http://savannah.gnu.org/projects/patch/
Original-Maintainer: Laszlo Boszormenyi (GCS) <[email protected]>

Y en Slackware por ejemplo:

$ grep $(sed 's,^/,,' <<< "$(command -v patch)" ) /var/log/packages/* | cut -d: -f1
/var/log/packages/metamail-2.7-x86_64-7
/var/log/packages/patch-2.7.6-x86_64-3
/var/log/packages/patchelf-0.10-x86_64-1
$ cat /var/log/packages/patch-2.7.6-x86_64-3
PACKAGE NAME:     patch-2.7.6-x86_64-3
COMPRESSED PACKAGE SIZE:     116K
UNCOMPRESSED PACKAGE SIZE:     290K
PACKAGE LOCATION: ./patch-2.7.6-x86_64-3.txz
PACKAGE DESCRIPTION:
patch: patch (apply a diff file to an original file or files)
patch:
patch: Patch is a utility used to apply diffs (or patches) to files, which
patch: are usually source code.
patch:
patch: Larry Wall wrote the original version of patch. Paul Eggert removed
patch: patch's arbitrary limits; added support for binary files, setting
patch: file times, and deleting files; and made it conform better to POSIX.
patch: Other  contributors include Wayne Davison, who added unidiff support,
patch: and David MacKenzie, who added configuration and backup support.
patch:

En ambos casos se utiliza el parche GNU y la descripción del paquete Debian incluso contiene un enlace a la página de inicio del proyecto. http://savannah.gnu.org/projects/patchpero por el momento no funciona.

También es posible que desee obtener la fuente que patchutiliza actualmente en su sistema con todos los parches y comentarios agregados por los mantenedores de paquetes. En Debian puedes hacer:

$ apt-get source patch

Respuesta2

El patchcomando predeterminado en al menosDebian(pero presumiblemente también en la mayoría de las otras distribuciones de Linux) es GNU patch.

La "página de inicio" del proyecto GNU patcheshttps://www.gnu.org/software/patch/

Esta página contiene enlaces a ambos.repositorios de softwareyarchivos de distribución descargables.

Un espejo Github del repositorio de software está disponible enhttps://github.com/mirror/patch

Los sistemas BSD tienen una implementación alternativa. La implementación de OpenBSD se puede ver enhttps://cvsweb.openbsd.org/src/usr.bin/patch/

Respuesta3

Si estás en Linux, lo más probable es que utilices el parche GNU, consultahttp://www.gnu.org, pero patchtiene una larga historia y existe en más de una variante:

patches un programa escrito originalmente por Larry Wall en mayo de 1985. Publicó la fuente de la versión 1.3 en formato shar en el grupo de noticias Usenet.mod.sources.

La versión 2.0 fue publicada en 1986 por Larry Wall mediante una publicación comp.sources.unix(como mod.sourcesluego se le cambió el nombre) y la última versión de Larry Wall se realizó en junio de 1988.

La licencia original de Larry era:

* This program may be copied as long as you don't try to make any
* money off of it, or pretend that you wrote it.

lo cual no está alineado con las ideas actuales sobre OSS ya que prohíbe "ganar dinero" con él.

Dado que un programa tan complejo patchnecesita atención, existen varias versiones derivadas.

La gente de GNU ideó una versión GPLd en 1990, pero AFAIK nunca verificó que Larry haya dado su visto bueno para este cambio de licencia.

En la década de 1990 se creó una versión de código cerrado de IBM, HP, DEC y Sun. Se hizo compatible con POSIX pero nunca solucionó todos los errores conocidos.

Aprox. Hace 10 años, OpenBSD y yo creamos variantes sin código GPLd.

Aprox. Hace 5 años, Larry nos dio permiso a la gente de OpenBSD y a mí para usar la licencia BSD de 1 cláusula para que el parche OSS fuera compatible.

Si bien existe algún tipo de intercambio entre la gente de BSD y yo con respecto a errores y problemas de seguridad, la versión GNU es separada.

La versión schilytoolsincluye un costoso conjunto de pruebas para el parche y compara los resultados con los resultados esperados y con los resultados de la versión instalada localmente. Dado que se trata (en muchos casos de un gpatch), es necesario incluir algunas soluciones cada vez que detecta un error en la versión instalada del sistema,-)

La página de manual de la versión de schilytools se puede encontrar aquí:http://schilytools.sourceforge.net/man/man1/patch.1.html

Dado que el OP está interesado en QNX, la fuente de OpenBSD no le interesa ya que esa fuente no es portátil. Las schilytools son altamente portátiles a pesar de que ha pasado más tiempo desde que se vieron los últimos comentarios sobre una compilación QNX. Entonces, si ya no se compila en QNX, envíe una pista.

Por cierto: el parche GNU entra en conflicto con algunos de los requisitos de POSIX.

información relacionada