He usado Linux durante bastante tiempo, y siempre me he preguntado cómo Windows pudo manejar las dependencias de los programas como apt-get , aptitude , Pacman , yum y otros administradores de paquetes. A veces, mi administrador de paquetes me decía que esta versión de esa biblioteca era necesaria para este paquete o que habría algún conflicto.
¿Cómo maneja Windows todas esas cosas?
Respuestas:
No lo hace. A menos que estemos hablando de .NET que le pide que instale la versión X de framework de acuerdo con el compilador.
Todo lo demás solo arroja un error. Con suerte, lo tienes
missing dll xxxx.dll
. Aunque, la mayoría de los instaladores tendrán incluidas las bibliotecas necesarias para ejecutar el software.fuente
Edición 4/4/2014: Hola OP, mira lo que se acaba de lanzar hoy:
http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx
Solo quería ampliar un poco la respuesta aceptada, porque es un poco escasa en detalles. La respuesta de Filipe no hace mención de las estrategias que Windows realidad hace uso de las cuestiones a resolver o dependencia programa de mitigar, al igual que el almacén de componentes (WinSxS,) la caché de ensamblados global, el sistema MSI, etc, pero por otro lado que es básicamente justo en el tiene la sensación de que es responsabilidad del desarrollador incluir bibliotecas personalizadas con la aplicación y verificar la existencia de dependencias antes de comprometerse con la transacción de instalación.
Windows es menos modular que Linux, que tiene aspectos positivos y negativos. En el lado negativo, Windows es más monolítico, lo que significa que relativamente menos componentes del sistema operativo son extraíbles u opcionales como en Linux. (Aunque Windows está mejorando lentamente al respecto).
Pero en el lado positivo, eso significa que los desarrolladores pueden hacer muchas más suposiciones sobre las bibliotecas que un usuario ya tendrá presentes en su máquina. Y varias versiones de esas bibliotecas, una vez instaladas, se almacenarán una al lado de la otra en el almacén de componentes, de modo que ya no tenga App1 ladrando sobre la necesidad de crapDLL.dll, y App2 ladrando sobre la necesidad de una versión diferente de crapDLL.dll al mismo tiempo. tiempo, etc.
fuente
En Windows, corresponde al autor del software proporcionar versiones de sus bibliotecas. Windows tiene algunas facilidades para ayudar con esto.
Windows Installer y los servicios Trusted Installer que interactúan con los programas de instalación (.msi). También hay una tecnología de soporte llamada Aplicaciones Aisladas y Ensamblados uno al lado del otro que ayudan a resolver conflictos de versiones.
Para las aplicaciones de .NET framework existe la Caché de ensamblados global, los ensamblados con nombres sólidos y los Manifiestos principales.
En Windows 8 y 8.1 existe la Tienda de aplicaciones de Windows junto con la Biblioteca de tiempo de ejecución de Windows (reemplazo de la API win32).
editar: El núcleo de la mayoría de estas tecnologías son los manifiestos de ensamblaje, los archivos incrustados que proporcionan números de versión, los autores, los ensamblajes dependientes y sus versiones, entre otros datos.
fuente
Las otras respuestas señalaron correctamente que la gestión de paquetes y el sistema operativo son ideas separadas, pero no mencionaron una solución.
El sistema de administración de paquetes más similar a apt-get o yum en Windows actualmente sería Chocolatey . Permite a las personas instalar / desinstalar paquetes (msi, exe, scripts de powershell) y esos paquetes pueden contener información sobre sus dependencias que Chocolatey puede resolver automáticamente.
El paquete generalmente contiene un enlace a los binarios y scripts para administrar el proceso de instalación. El paquete también puede contener los archivos binarios o cualquier otro archivo requerido (las dependencias deben estar en un paquete separado). Chocolatey también puede usar sistemas de administración de paquetes externos como el Instalador de plataforma web de Microsoft , Ruby Gems, Python, etc.
fuente
Por lo que entiendo, las únicas dependencias manejadas por Windows son las bibliotecas específicas de Microsoft. Si instala, como ejemplo, un programa de código abierto en Windows como Blender, tendrá las bibliotecas libavcodec y ffmpeg en sus propios archivos dll separados, y si instala, por ejemplo, OpenShot, instalará su propia copia del libavcodec en su propio directorio, y pueden ser versiones completamente diferentes. Esto puede ser una pesadilla al desinstalar software para limpiar la basura dejada atrás, y también ocupa mucho más espacio en disco con redundancia de biblioteca.
fuente