¿Cuáles son las diferencias prácticas entre los diversos repositorios de paquetes de Emacs?


124

Noto que hay varios repositorios diferentes que a menudo contienen el mismo software. ¿Por qué querría preferir:

  • GNU ELPA
  • Mermelada
  • MELPA

sobre los demás? Dado que cualquier repositorio no contiene todos los paquetes que quiero, ¿es una buena idea tener estos repositorios habilitados simultáneamente?

Respuestas:


82

GNU ELPA es el repositorio oficial de paquetes de GNU Emacs. Es el único habilitado por defecto, lo que significa que tiene el mayor alcance. Al mismo tiempo, enviar un paquete es un poco complicado y requiere una asignación de derechos de autor FSF, lo que significa que tiene una selección relativamente limitada de paquetes.

MELPA y Marmalade son repositorios de paquetes de terceros. GNU no los admite oficialmente, pero también tienen selecciones mucho más grandes de paquetes. La calidad del paquete es un poco más variable, pero es mucho más probable que encuentre lo que está buscando, especialmente si es un poco oscuro.

Marmalade y MELPA tienen modelos ligeramente diferentes para cargadores de paquetes. Según tengo entendido, MELPA rastrea un repositorio de control de versiones directamente (es decir, a través de GitHub), lo que permite a los autores de paquetes actualizar paquetes simplemente empujando commits a una rama. Marmalade, por otro lado, hace que las personas carguen paquetes al repositorio explícitamente.

En la práctica, no he visto mucha diferencia entre MELPA y Marmalade. No hay mucho inconveniente en permitir que ambos tengan la mayor selección posible de paquetes instalables: he estado usando ambos (y GNU ELPA, por supuesto) durante un tiempo sin problemas significativos.

Una posible preocupación (que no me he encontrado) con tener ambos repositorios habilitados, que no me he encontrado, es tener paquetes disponibles de ambos en diferentes versiones. Por defecto, el administrador de paquetes ( package.el) no tiene ninguna forma de resolver conflictos como este; sin embargo, puede resolver esto instalando el melpapaquete que le permite personalizar qué paquetes se proporcionan o se excluyen de qué repositorios. Puede ver más detalles aquí o en la documentación del melpapaquete.

Como @Malabarba señaló útilmente, este problema se resuelve en Emacs 24.4.

Si está realmente preocupado por la seguridad, es posible que desee evitar tanto MELPA como Marmalade porque permiten que cualquiera cargue paquetes y, que yo sepa, no tienen ningún acuerdo de seguridad proactivo. El repositorio GNU ELPA, por otro lado, es administrado por la FSF y tiene paquetes firmados que deberían ayudar. Por supuesto, si la seguridad es realmente importante, es posible que desee revisar e instalar los paquetes elisp a mano en lugar de usar el administrador de paquetes.


13
El nuevo package.el que viene en emacs 24.4 maneja los números de versión divergentes con gracia. Si dos repos tienen el mismo paquete con una versión diferente, se le ofrecen ambos, y uno nunca anulará al otro durante una actualización.
Malabarba

1
@Malabarba: ¡Guau, qué bueno escucharlo!
Tikhon Jelvis

14
Esta es una buena respuesta, pero probablemente también debería mencionar MELPA estable ( melpa-stable.milkbox.net ). MELPA obtendrá automáticamente la última revisión de la rama maestra de un repositorio, mientras que MELPA estable obtendrá la última revisión etiquetada.
shosti

@shosti: Oh genial, no sabía sobre eso. Sería bueno poner eso como su propia respuesta, en realidad.
Tikhon Jelvis

77
mermelada no permite que nadie cargue paquetes. solo usuarios registrados. Conozco a todos los cargadores en este momento. Entonces hay algún tipo de revisión por pares.
nic ferrier

44

A mi modo de ver, algunos repos tienen más gastos generales relacionados con el envío de paquetes que otros; los repositorios con más gastos generales tienden a tener menos paquetes. En orden de mayor a menor sobrecarga:

  1. GNU ELPA requiere que todo el código sea GPL y los derechos de autor asignados a la FSF. El código ELPA es esencialmente "propiedad" del equipo central de Emacs, por lo que hay mucho menos que con otros repositorios. (org-mode tiene su propio repositorio, pero tiene el mismo modo de operación).
  2. Marmalade requiere que todo el código tenga una licencia compatible con GPL y todos los paquetes se cargan manualmente. La propiedad es un poco no especificada, y el cambio de propiedad no tiene un proceso establecido AFAIK.
  3. MELPA Stable está más o menos en competencia directa con Marmalade, excepto que no tiene restricciones de licencia y crea automáticamente paquetes a partir de repositorios git utilizando la última revisión etiquetada. La propiedad se determina a través del repositorio de MELPA (los cambios de propiedad se producen a través de una solicitud de extracción).
  4. MELPA es como MELPA estable, excepto que siempre se extrae de la última revisión en la rama maestra de un repositorio de git. Los paquetes tienden a ser "innovadores" y pueden ser un poco libres de estabilidad (lo que tiene ventajas y desventajas).

Personalmente, creo que MELPA Stable o Marmalade probablemente ganarán a la larga para la mayoría de los usuarios: MELPA propiamente dicho es bastante inestable y ELPA es demasiado restrictivo para ser realmente escalable para muchos paquetes. Pero eso es solo una opinión.


66
marmalade ahora tiene API para agregar propietarios a los paquetes.
nic ferrier

31

Hay varios repositorios de paquetes disponibles.

Oficial

GNU ELPA es el repositorio oficial del paquete. Es pequeño y requiere la asignación de derechos de autor (de todos los autores de un paquete) a la FSF para contribuir a él.

Los paquetes en GNU ELPA son realmente solo un repositorio git . La ventaja de estar alojado aquí es que el equipo central intenta actualizar los paquetes si Emacs mismo agrega o desprecia las características.

Construido desde la fuente

MELPA es el repositorio de paquetes más grande y de más rápido crecimiento . Lanza una nueva versión cada vez que se empuja una nueva versión a un repositorio, o se actualiza una página de EmacsWiki.

Es sangrienta, pero funciona muy bien en la práctica. MELPA está curada para evitar paquetes duplicados y para garantizar que se registre el inicio canónico del paquete (en lugar de una bifurcación aleatoria).

MELPA tiene el problema de que las versiones son solo marcas de tiempo, por ejemplo my-package-20131231.2359. Esto significa que si depende de my-package:

;; Package-Requires: ((my-package "1.2.3"))

entonces Emacs pensará que cualquier versión de MELPA es lo suficientemente nueva.

MELPA Stable es lo mismo que MELPA, pero en lugar de usar versiones de fecha y hora, usa las versiones en etiquetas git. Esto permite una mejor resolución de dependencia, pero tiene problemas para depender de los paquetes wiki .

Subidas de usuarios

Marmalade es mucho más como un repositorio tradicional de otros lenguajes de programación. El desarrollador del paquete carga el paquete a Marmalade cuando hacen un lanzamiento.

En principio, esto le da a los paquetes un proceso de lanzamiento adecuado (Marmalade es anterior a MELPA estable) y también evita el problema del número de versión autogenerado. Sin embargo, no hay verificación de identidad. Cualquiera puede cargar un paquete, incluso si no lo escribió. Esto se vuelve difícil si el responsable de mantenimiento my-packageencuentra que alguien más ha subido my-packagey no puede cargar nuevas versiones posteriormente.

Marmalade solía ser una aplicación node.js, y ahora está escrita en elisp. Ambas versiones han tenido problemas de tiempo de actividad ocasionalmente.

Proyecto específico

Org-mode ELPA es un repositorio que solo aloja orgy org-plus-contrib. Org-mode es parte del núcleo de Emacs, pero está desarrollado externamente y el código solo se sincroniza periódicamente con el enlace troncal de Emacs. Este repositorio le permite tener el modo org de vanguardia.

User42 ELPA es un repositorio para un desarrollador de paquete único que ha lanzado una gran variedad de paquetes de Emacs . Si le gusta alguno de sus paquetes, puede agregar este repositorio.

Sunrise Commander ELPA es un repositorio de extensiones para Sunrise Commander (un paquete de Emacs para la exploración de archivos, inspirado en Midnight Commander ).

Retirado

El ELPA de Tromey fue el primer repositorio establecido. Se reemplaza oficialmente con GNU ELPA, pero no tenía los mismos requisitos de asignación de derechos de autor. A partir de 2010, ya no se actualiza.

El archivo de paquetes de Elpy contenía varios paquetes desarrollados por Jorgen Schaefer para 'Elpy, el entorno de desarrollo de Python de Emacs' , pero que migraron a MELPA Stable.


44
marmalade definitivamente ha tenido problemas de tiempo de actividad ... Creo que los he resuelto con nic.ferrier.me.uk/blog/2014_08/deploying-blue-green-with-docker ; nadie ha mencionado los riesgos involucrados en el uso de github , un proveedor comercial de software basado en web, como back-end; Creo que es un riesgo. Marmalade es software libre e incluso alguien más puede instalar lo creado.
nic ferrier

no one has mentioned the risks involved in using github, a commercial provider of web based software, as a backend: pero estoy seguro de que esas preocupaciones desaparecerán ahora que es Microsoft GitHub ;-)
TomRoche

13

Alguna información adicional, para complementar las otras respuestas aquí.

  1. Alguna información sobre MELPA y MELPA "estable" -

    Comience mirando esta pregunta casi duplicada , de StackOverflow, incluidos los comentarios de la pregunta en sí. En particular, este comentario que publiqué, después de intercambiar correos electrónicos con Donald Curtis (responsable de MELPA y MELPA estable):

    Desde su punto de vista [el de Donald Curtis, y según tengo entendido su comunicación para mí], el sitio "estable" de MELPA está en modo de mantenimiento solamente . Y la única razón por la que no existe un código como el mío es porque nadie ha implementado la carga desde la wiki [Emacs Wiki] para el sitio "estable". Además, no hay "curación" por parte de nadie: no hay filtros para determinar si un paquete es estable, arriesgado, etc. Algunos desarrolladores de paquetes solicitaron la existencia de dos sitios que querían distinguir las versiones de desarrollo de sus paquetes de las anteriores ("estable ") versiones.

    En resumen, no hay nada que sea inherentemente más "estable" sobre el contenido de "MELPA estable" . La numeración de la versión y el método de alimentación pueden ser diferentes; eso es todo. Y si un mantenedor de paquete en particular quiere distinguir las versiones "estables" de las versiones de "desarrollo", y quiere hacerlo cargándolas en los dos sitios diferentes, entonces ese es el efecto para ese paquete .

  2. Una diferencia entre MELPA y Marmalade (y GNU ELPA) es que no se requiere que el código contribuido a MELPA se obtenga de un repositorio git. En particular, se puede extraer automáticamente del Área Elisp de Emacs Wiki .

    ¿Significa eso, como han dicho algunos, que cualquiera puede cargar cualquier cosa y que no tiene forma de saber si el código es realmente del autor reclamado, etc.? Si y no. En general, sí: cualquiera es libre de cargar el código de Elisp a Emacs Wiki. Como dice la parte superior de la página Elisp-Area:

    Esta es el área de EmacsWiki elisp, donde recopilamos archivos EmacsLisp. No se requiere inicio de sesión, no se requiere control de versión, no se requiere ftp, no se requiere contraseña. Es tan simple como la propia wiki. Eso también significa que cualquiera puede colocar código malicioso en estos archivos EmacsLisp. En caso de duda, no los use.

    Sin embargo, para que lo sepas, soy administrador de la wiki, y mis propias bibliotecas de Lisp en el área de Elisp wiki son páginas bloqueadas. Eso significa que solo un administrador de wiki puede subirlos. Entonces, en este caso, puedes estar bastante seguro de que las bibliotecas mías que descargaste de MELPA o Emacs Wiki fueron cargadas por mí. Sin embargo, al igual que con todo en Internet, no hay garantía de garantía, al igual que no hay garantía con el código en sí. Como dice la propaganda de GPL en cada biblioteca de GPL:

    Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia Pública General de GNU para más detalles.

HTH. Feliz pirateo.


Muy tranquilizador, estoy seguro.
nic ferrier

1
Déjame estar en desacuerdo con tu opinión de MELPA. El autor del paquete no "libera" nada a MELPA. Él o ella solo se compromete con su propio repositorio, y MELPA lo recoge. La diferencia es que MELPA elige cualquier cosa, mientras que MELPA estable selecciona lanzamientos etiquetados . Esto es de hecho una cuestión de preferencia. Algunas personas prefieren siempre hacer una ramificación característica, tratar el tronco como sagrado y señalar que el cambio está listo al fusionarse con el tronco. Otros se desarrollan en el tronco pero marcan los lanzamientos listos mediante etiquetado explícito. Ambos enfoques son razonables ...
Mekk

1
... Personalmente, estoy en el lado del etiquetado , ya que me da claro cuándo y por qué hago el lanzamiento (y permite publicar versiones preliminares en el tronco, y evita la necesidad de realizar ramificaciones de características para pequeños cambios de código, y me permite usar números de versión para indicar qué tan grandes son los cambios y permitirme usar números de versión amigables para los humanos). En pocas palabras: siempre que haya autores que prefieran etiquetar lanzamientos, melpa estable tiene sus méritos, y yo diría que no hay nada de malo en el autor que administra los lanzamientos etiquetando, por el contrario, eso significa que le importa pensar cuándo y qué debería ser liberado
Mekk