Articulo de referencia

Parche (informática)

Un parche es un conjunto de datos para modificar un recurso de software existente , como un programa o un archivo , generalmente para corregir errores y vulnerabilidades de segu...

Un parche es un conjunto de datos para modificar un recurso de software existente , como un programa o un archivo , generalmente para corregir errores y vulnerabilidades de seguridad . [ 1 ] [ 2 ] Aplicar un parche también implica aplicar dicho parche al recurso existente. Aplicar un parche a un sistema consiste en aplicarlo. Un parche puede crearse para mejorar la funcionalidad, la usabilidad o el rendimiento . Si bien puede crearse manualmente, comúnmente se crea mediante una herramienta que compara dos versiones del recurso y genera datos que permiten transformar una en la otra.

Por lo general, un parche debe aplicarse a la versión específica del recurso que se pretende modificar, aunque existen excepciones. Algunas herramientas de parcheo pueden detectar la versión del recurso existente y aplicar el parche adecuado, incluso si admite varias versiones. A medida que se publican más parches, su tamaño acumulado puede aumentar considerablemente, llegando a superar en ocasiones el tamaño del propio recurso. Para gestionar esto, se puede limitar el número de versiones compatibles o, en su lugar, proporcionar una copia completa del recurso.

La aplicación de parches permite modificar un ejecutable binario . Si bien esto puede ser técnicamente complejo (requiere un conocimiento profundo del funcionamiento del ejecutable), puede ser factible cuando no se dispone del código fuente para compilar un ejecutable completo, y permite una distribución más pequeña, que puede resultar más económica que la distribución de archivos completos.

Aunque a menudo se pretende solucionar problemas, un parche puede introducir otros nuevos, un escenario conocido como regresión de software . En algunos casos, una actualización desactiva intencionadamente la funcionalidad, por ejemplo, eliminando aspectos para los que el usuario ya no tiene licencia. La gestión de parches forma parte de la gestión del ciclo de vida e implica una estrategia y planificación sobre qué parches deben aplicarse a qué sistemas y en qué momentos. Normalmente, un parche se aplica de forma permanente (es decir, al almacenamiento ), pero en algunos casos se aplica a la memoria (es decir, mediante una herramienta como un depurador ), en cuyo caso el cambio se pierde cuando el recurso se recarga desde el almacenamiento.

A veces, el término "actualización de software" se confunde con "parche", aunque no son sinónimos . Una actualización se puede implementar mediante archivos de parche y el proceso de parcheo. Además, algunos sostienen que el parcheo no se limita a modificar el contenido de los archivos, sino que añadir, eliminar y reemplazar archivos completos también constituye un parcheo. Normalmente, "parche" implica un cambio relativamente pequeño, por lo que un parche de gran tamaño o alcance puede denominarse simplemente " actualización de software" o con otro nombre más específico, como " paquete de servicio" . Windows NT y sus sucesores (incluidos Windows 2000 , Windows XP , Windows Vista y Windows 7 ) utilizan el término "paquete de servicio " . [ 3 ] Históricamente, IBM utilizaba los términos "FixPak" y "Disquete de Servicio Correctivo" para este tipo de actualizaciones. [ 4 ]

Historia

Cinta de programación para la Harvard Mark I de 1944 , una de las primeras computadoras digitales. Nótese que se utilizaron parches físicos para corregir los agujeros perforados cubriéndolos.

Históricamente, los proveedores de software distribuían parches en cintas de papel o tarjetas perforadas , esperando que el destinatario recortara la parte indicada de la cinta original (o unidad) e insertara el segmento de reemplazo (de ahí su nombre). Posteriormente, la distribución de parches se realizó mediante cintas magnéticas. Luego, tras la invención de las unidades de disco extraíbles, los parches provenían del desarrollador del software a través de un disco o, más tarde, de un CD-ROM enviado por correo . Con el acceso generalizado a Internet , la descarga de parches desde el sitio web del desarrollador o mediante actualizaciones automáticas de software se volvió frecuente para los usuarios finales. A partir de Mac OS 9 de Apple y Windows ME de Microsoft , los sistemas operativos de PC adquirieron la capacidad de obtener actualizaciones automáticas de software a través de Internet.

Los programas informáticos suelen coordinar parches para actualizar un programa específico. La automatización simplifica la tarea del usuario final, permitiéndole únicamente ejecutar un programa de actualización, el cual se encarga de que la actualización se realice de forma completa y correcta. Los Service Packs para Microsoft Windows NT y sus sucesores, así como para muchos productos de software comerciales, adoptan estas estrategias automatizadas.

Algunos programas se actualizan automáticamente a través de Internet con muy poca o ninguna intervención por parte del usuario. El mantenimiento del software de servidores y de sistemas operativos suele realizarse de esta manera. En situaciones donde los administradores de sistemas controlan varios ordenadores, este tipo de automatización ayuda a mantener la coherencia. La aplicación de parches de seguridad también se realiza habitualmente de esta forma.

Con la llegada de soportes de almacenamiento de mayor capacidad y un mayor ancho de banda de Internet, se hizo habitual reemplazar archivos completos (o incluso todos los archivos de un programa) en lugar de modificar los archivos existentes, especialmente en el caso de programas pequeños.

Usar

Parcheo binario

Los parches para software propietario suelen distribuirse como archivos ejecutables en lugar de código fuente . Al ejecutarse, estos archivos cargan en memoria un programa que gestiona la instalación del código del parche en el/los programa/s de destino en el disco.

Los parches para otros programas se distribuyen normalmente como archivos de datos que contienen el código del parche. Estos archivos son leídos por un programa de utilidad de parcheo que realiza la instalación. Esta utilidad modifica el archivo ejecutable del programa de destino (el código máquina del programa) , generalmente sobrescribiendo sus bytes con bytes que representan el nuevo código del parche. Si el nuevo código cabe en el espacio (número de bytes) que ocupa el código antiguo, se puede insertar sobrescribiendo directamente el código antiguo. Esto se denomina parche en línea. Si el nuevo código es más grande que el código antiguo, la utilidad de parcheo añadirá registros de carga que contienen el nuevo código al archivo objeto del programa de destino que se está parcheando. Cuando se ejecuta el programa parcheado, la ejecución se dirige al nuevo código con instrucciones de salto (saltos o llamadas) que reemplazan la parte del código antiguo donde se necesita el nuevo código. En los primeros microordenadores de 8 bits, como por ejemplo el Radio Shack TRS-80 , el sistema operativo incluye una utilidad PATCH/CMD que acepta datos de parches de un archivo de texto y aplica las correcciones al/los archivo/s binario/s ejecutable/s del programa de destino.

El código del parche debe tener espacio en la memoria para ejecutarse en tiempo de ejecución. Los parches en línea no presentan dificultad, pero cuando se necesita espacio de memoria adicional, el programador debe improvisar. Naturalmente, si el programador del parche es quien creó originalmente el código a parchear, esto resulta más sencillo. Los programadores experimentados planifican con anticipación esta necesidad reservando memoria para una expansión posterior, que queda sin usar al producir su iteración final. Otros programadores que no participaron en la implementación original, y que buscan incorporar cambios posteriormente, deben encontrar o crear espacio para los bytes adicionales necesarios. La circunstancia más favorable para esto es cuando la rutina a parchear es un módulo independiente. En este caso, el programador del parche solo necesita ajustar los punteros o indicadores de longitud que señalan a otros componentes del sistema el espacio ocupado por el módulo; luego puede llenar este espacio de memoria con su código de parche expandido. Si la rutina a parchear no existe como un módulo de memoria independiente, el programador debe encontrar maneras de reducir el tamaño de la rutina para crear suficiente espacio para el código de parche expandido. Las tácticas habituales incluyen acortar el código buscando secuencias de instrucciones más eficientes (o rediseñándolo con algoritmos más eficientes), compactar cadenas de mensajes y otras áreas de datos, externalizar funciones del programa al almacenamiento masivo (como superposiciones de disco) o eliminar características del programa que se consideren menos importantes que los cambios que se instalarán con el parche.

Se pueden aplicar manualmente pequeños parches de código máquina en memoria con la utilidad de depuración del sistema, como los depuradores DDT de CP/M o DEBUG de MS-DOS . Los programadores que trabajaban con BASIC interpretado solían usar el comando POKE para modificar la funcionalidad de una rutina de servicio del sistema o del propio intérprete.

Parcheo del código fuente

Un parche para el código fuente define cómo modificar el texto de los archivos de código. Este tipo de parche suele ser un archivo de texto que codifica las diferencias entre dos versiones de un archivo. Dado que este tipo de parche se crea a menudo mediante un diffcomando, el archivo de parche también se denomina archivo diff.

La aplicación de parches al código fuente es común en los proyectos de software de código abierto . Los mantenedores reciben parches o los usuarios publican parches que corrigen problemas y añaden funcionalidades, como la compatibilidad con idiomas locales distintos al del proyecto. En un ejemplo de las primeras etapas del desarrollo del kernel de Linux (conocido por publicar su código fuente completo), Linus Torvalds , su autor original, recibió cientos de miles de parches de numerosos programadores para aplicarlos a su versión original.

El servidor HTTP Apache evolucionó originalmente como una serie de parches que Brian Behlendorf recopiló para mejorar NCSA HTTPd , de ahí un nombre que implica que es una colección de parches ( "un servidor con parches" ). Las preguntas frecuentes en el sitio oficial del proyecto indican que el nombre "Apache" fue elegido en señal de respeto a la tribu indígena apache . Sin embargo, la explicación de "un servidor con parches" se dio inicialmente en el sitio web del proyecto. [ 5 ]

Véase también

Referencias

  1. "Microsoft lanza la mayor actualización de software de su historia" . Reuters. 14 de octubre de 2009. Archivado del original el 16 de octubre de 2009.
  2. "¿Qué es una corrección de errores? – Definición de Techopedia" . techopedia.com . Archivado del original el 3 de julio de 2018. Consultado el 29 de julio de 2015 .
  3. "Centro de actualizaciones y paquetes de servicio" . windows.microsoft.com . Archivado del original el 1 de junio de 2015. Consultado el 1 de junio de 2015 .
  4. "Glosario de términos" . Tavi.co.uk. Archivado del original el 1 de diciembre de 2016. Consultado el 23 de noviembre de 2016 .
  5. "Proyecto de servidor HTTP Apache" . 15 de junio de 1997. Archivado del original el 15 de junio de 1997.{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace )
  • Entrada del archivo de jerga para el parche
  • Formato oficial de parches del kernel de Linux
  • Parche de día cero: exponiendo el rendimiento (in)seguro de los proveedores . Archivado el 31/01/2014 en Wayback Machine . Una métrica que compara el rendimiento de los parches de Microsoft y Apple.