Was sind die praktischen Unterschiede zwischen den verschiedenen Emacs-Paket-Repositories?

124

Ich stelle fest, dass es mehrere verschiedene Repositorys gibt, die häufig dieselbe Software enthalten. Warum sollte ich bevorzugen:

  • GNU ELPA
  • Marmelade
  • MELPA

über die anderen? Da ein Repository nicht alle gewünschten Pakete enthält, ist es eine gute Idee, diese Repositorys gleichzeitig zu aktivieren.

Eric Brown
quelle

Antworten:

82

GNU ELPA ist das offizielle GNU Emacs-Paket-Repository. Es ist das einzige, das standardmäßig aktiviert ist, was bedeutet, dass es die größte Reichweite hat. Gleichzeitig ist das Einreichen eines Pakets etwas umständlich und erfordert eine FSF-Urheberrechtszuweisung, was bedeutet, dass es eine relativ begrenzte Auswahl an Paketen gibt.

MELPA und Marmalade sind Drittanbieter-Paketdepots. Sie werden nicht offiziell von GNU unterstützt, haben aber auch eine viel größere Auswahl an Paketen. Die Paketqualität ist etwas variabler, aber es ist viel wahrscheinlicher, dass Sie das finden, wonach Sie suchen, insbesondere, wenn es etwas dunkel ist.

Marmalade und MELPA haben leicht unterschiedliche Modelle für Paket-Uploader. Meines Wissens nach verfolgt MELPA ein Versionskontroll-Repository direkt (dh über GitHub), sodass Paketautoren Pakete aktualisieren können, indem sie Commits an einen Zweig senden. Bei Marmalade hingegen werden Pakete explizit in das Repository hochgeladen.

In der Praxis habe ich keinen großen Unterschied zwischen MELPA und Marmelade gesehen. Es hat nicht viel Nachteil, beiden die größtmögliche Auswahl an installierbaren Paketen zu ermöglichen: Ich verwende beide (und natürlich GNU ELPA) seit einiger Zeit ohne nennenswerte Probleme.

Ein mögliches Problem (das mir nicht begegnet ist), wenn beide Repositorys aktiviert sind, das mir nicht begegnet ist, besteht darin, dass Pakete von beiden in verschiedenen Versionen verfügbar sind. Standardmäßig hat der Paketmanager ( package.el) keine Möglichkeit, Konflikte wie diese zu lösen. Sie können dies jedoch beheben, indem Sie das melpaPaket installieren , mit dem Sie anpassen können, welche Pakete in welchen Repositorys bereitgestellt oder davon ausgeschlossen werden. Weitere Details finden Sie hier oder in der Dokumentation des melpaPakets.

Wie @Malabarba hilfreich hervorhob, wurde dieses Problem in Emacs 24.4 behoben.

Wenn Sie sich wirklich Sorgen um die Sicherheit machen, sollten Sie sowohl MELPA als auch Marmalade meiden, da dort niemand Pakete hochladen kann und meines Wissens keine proaktiven Sicherheitsvorkehrungen getroffen wurden. Das GNU ELPA-Repository hingegen wird von der FSF verwaltet und hat Pakete signiert, die helfen sollen. Wenn die Sicherheit wirklich wichtig ist, können Sie elisp-Pakete auch manuell überprüfen und installieren, anstatt den Paket-Manager zu verwenden.

Tikhon Jelvis
quelle
13
Das neue package.el, das in Emacs 24.4 enthalten ist, handhabt unterschiedliche Versionsnummern ordnungsgemäß. Wenn zwei Repos dasselbe Paket mit unterschiedlicher Version haben, werden beide angeboten und eines überschreibt das andere bei einem Update nie.
Malabarba
1
@ Malabarba: Wow, das ist toll zu hören!
Tikhon Jelvis
14
Dies ist eine gute Antwort, sollte aber wahrscheinlich auch MELPA stable ( melpa-stable.milkbox.net ) erwähnen . MELPA erhält automatisch die neueste Revision von der Hauptniederlassung eines Repos, während MELPA stable die neueste getaggte Revision erhält.
Shosti
@shosti: Oh, ich wusste nichts davon. Es könnte gut sein, das als seine eigene Antwort zu formulieren.
Tikhon Jelvis
7
Marmelade erlaubt niemandem, Pakete hochzuladen. Nur registrierte Benutzer. Ich kenne jetzt alle Uploader. Es gibt also eine Art Peer Review.
Nic Ferrier
44

Meiner Meinung nach haben einige Repos mehr Aufwand beim Einreichen von Paketen als andere. Die Repos mit mehr Overhead haben tendenziell weniger Pakete. In der Reihenfolge vom größten bis zum kleinsten Aufwand:

  1. GNU ELPA setzt voraus, dass der gesamte Code der GPL und das Copyright der FSF zugewiesen sind. ELPA-Code gehört im Wesentlichen dem Emacs-Kernteam, daher gibt es viel weniger davon als bei anderen Repos. (org-mode hat ein eigenes Repo, aber die gleiche Funktionsweise.)
  2. Marmalade setzt voraus, dass der gesamte Code über eine GPL-kompatible Lizenz verfügt und alle Pakete manuell hochgeladen werden. Die Eigentümerschaft ist ein wenig unbestimmt, und ein Eigentümerwechsel hat keinen festgelegten AFAIK-Prozess.
  3. MELPA Stable steht mehr oder weniger in direkter Konkurrenz zu Marmalade, außer dass es keine Lizenzbeschränkungen gibt und automatisch Pakete aus Git Repos mit der neuesten getaggten Revision erstellt. Das Eigentum wird durch das MELPA-Repo bestimmt (Eigentümerwechsel erfolgen durch Pull-Request).
  4. MELPA ist wie MELPA stable, nur dass es immer von der neuesten Version des Master-Zweigs eines Git-Repos stammt. Die Pakete neigen dazu, "auf dem neuesten Stand" zu sein, und es kann in Bezug auf die Stabilität ein bisschen alles andere als einfach sein (was Vor- und Nachteile hat).

Persönlich denke ich, dass entweder MELPA Stable oder Marmalade auf lange Sicht für die meisten Benutzer von Vorteil sein wird - MELPA ist ziemlich instabil und ELPA ist zu restriktiv, um für viele Pakete wirklich skalierbar zu sein. Aber das ist nur eine Meinung.

Shosti
quelle
6
Marmelade hat jetzt API für das Hinzufügen von Besitzern zu Paketen.
Nic Ferrier
31

Es stehen mehrere Paketdepots zur Verfügung.

Offiziell

GNU ELPA ist das offizielle Paketrepo . Es ist klein und erfordert eine Urheberrechtszuweisung (aller Autoren eines Pakets) an die FSF, um dazu beizutragen.

Pakete auf GNU ELPA sind eigentlich nur ein Git-Repo . Der Vorteil, hier gehostet zu werden, besteht darin, dass das Kernteam versucht, Pakete zu aktualisieren, wenn Emacs selbst Funktionen hinzufügt oder nicht mehr unterstützt.

Aus der Quelle gebaut

MELPA ist das größte und am schnellsten wachsende Paket-Repo. Jedes Mal, wenn eine neue Version in ein Repo verschoben oder eine EmacsWiki-Seite aktualisiert wird, wird eine neue Version veröffentlicht.

Es ist eine Hochkonjunktur, aber in der Praxis funktioniert es sehr gut. MELPA ist kuratiert, um doppelte Pakete zu vermeiden und sicherzustellen, dass die kanonische Heimat des Pakets aufgezeichnet wird (anstelle einer zufälligen Abzweigung).

MELPA hat das Problem, dass Versionen nur Zeitstempel sind, z my-package-20131231.2359. Das bedeutet, wenn Sie auf my-package angewiesen sind:

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

dann wird Emacs denken, dass jede Version auf MELPA neu genug ist.

MELPA Stable ist dasselbe wie MELPA, verwendet jedoch anstelle von Datumsstempelversionen die Versionen in Git-Tags. Dies ermöglicht eine bessere Auflösung von Abhängigkeiten, hat jedoch Probleme mit Wiki-Paketen .

Nutzer-Uploads

Marmalade ist viel mehr wie ein traditionelles Repository aus anderen Programmiersprachen. Der Paketentwickler lädt das Paket bei der Veröffentlichung auf Marmalade hoch.

Im Prinzip wird auf diese Weise eine ordnungsgemäße Freigabe der Pakete erreicht (Marmelade ist älter als MELPA) und das Problem mit der automatisch generierten Versionsnummer vermieden. Es findet jedoch keine Identitätsüberprüfung statt. Jeder kann ein Paket hochladen, auch wenn er es nicht geschrieben hat. Dies wird schwierig, wenn der Betreuer von my-packagefeststellt, dass jemand anderes hochgeladen hat my-packageund anschließend keine neuen Versionen hochladen kann.

Marmalade war früher eine node.js-App und ist jetzt in elisp geschrieben. Beide Versionen hatten gelegentlich Probleme mit der Verfügbarkeit.

Projektspezifisch

Org-Mode ELPA ist ein Repo, das nur orgund hostet org-plus-contrib. Der Org-Modus ist Teil des Emacs-Kerns, wird jedoch extern entwickelt und der Code wird nur in regelmäßigen Abständen mit dem Emacs-Trunk synchronisiert. Mit diesem Repo haben Sie den neuesten Org-Modus.

User42 ELPA ist ein Repo für einen einzelnen Paketentwickler, der eine ganze Reihe von Emacs-Paketen veröffentlicht hat . Wenn Sie eines seiner Pakete mögen, können Sie dieses Repo hinzufügen.

Sunrise Commander ELPA ist ein Repo für Erweiterungen von Sunrise Commander (ein Emacs-Paket zum Durchsuchen von Dateien, inspiriert von Midnight Commander).

Im Ruhestand

Tromeys ELPA war das erste Repo. Es wurde offiziell durch GNU ELPA ersetzt, hatte aber nicht die gleichen Copyright-Anforderungen. Ab 2010 wird es nicht mehr aktualisiert.

Das Elpy-Paketarchiv enthielt verschiedene Pakete, die von Jorgen Schäfer für 'Elpy, die Emacs Python-Entwicklungsumgebung' entwickelt wurden , die jedoch zu MELPA Stable migriert wurden.

Wilfred Hughes
quelle
4
Marmelade hatte definitiv Probleme mit der Verfügbarkeit ... Ich glaube, ich habe sie mit nic.ferrier.me.uk/blog/2014_08/deploying-blue-green-with-docker gelöst - niemand hat die mit der Verwendung von Github verbundenen Risiken erwähnt , ein kommerzieller Anbieter von webbasierter Software als Backend; Ich glaube, das ist ein Risiko. Marmalade ist freie Software und sogar das gebaute Ding kann von jemand anderem installiert werden.
Nic Ferrier
no one has mentioned the risks involved in using github, a commercial provider of web based software, as a backend: aber ich bin sicher, dass diese Bedenken verschwinden werden, da es Microsoft GitHub ;-)
TomRoche
13

Einige zusätzliche Informationen, um die anderen Antworten hier zu ergänzen.

  1. Einige Infos zu MELPA und MELPA "Stall" -

    Schauen Sie sich zunächst diese ziemlich doppelte Frage von StackOverflow an, einschließlich der Kommentare für die Frage selbst. Insbesondere dieser Kommentar, den ich nach dem Austausch von E-Mails mit Donald Curtis (Betreuer von MELPA und MELPA stable) gepostet habe:

    Aus seiner Sicht [Donald Curtis und wie ich seine Mitteilung an mich verstehe] befindet sich die "stabile" MELPA-Site nur im Wartungsmodus . Und der einzige Grund, warum Code wie der meine nicht vorhanden ist, ist, dass niemand das Hochladen aus dem Wiki [Emacs Wiki] für die "stabile" Site implementiert hat . Außerdem wird von niemandem "kuratiert" - keine Filterung, um festzustellen, ob ein Paket stabil, riskant usw. ist. Die Existenz von zwei Sites wurde von einigen Paketentwicklern angefordert, die Entwicklerversionen ihrer Pakete von älteren ("stabilen") Versionen unterscheiden wollten ") Versionen.

    In der Summe gibt es nichts , was von Natur aus „stabil“ über den Inhalt „Melpa stabil“ ist . Die Versionsnummerierung und die Feed-Methode können unterschiedlich sein. das ist alles. Und wenn ein bestimmter Paketbetreuer "stabile" von "Entwicklungs" -Versionen unterscheiden möchte und dies durch Hochladen auf die beiden verschiedenen Sites tun möchte, dann ist dies der Effekt - für dieses Paket .

  2. Ein Unterschied zwischen MELPA und Marmalade (und GNU ELPA) ist, dass es nicht erforderlich ist, dass zu MELPA beigetragener Code aus einem Git-Repository stammt. Insbesondere kann es automatisch aus dem Elisp-Bereich von Emacs Wiki gezogen werden .

    Bedeutet das, wie einige gesagt haben, dass jeder etwas hochladen kann und Sie nicht wissen können, ob der Code tatsächlich vom beanspruchten Autor stammt, usw.? Ja und nein. Im Allgemeinen ja: Es steht jedem frei, Elisp-Code in Emacs Wiki hochzuladen. Wie oben auf der Elisp-Area-Seite steht:

    Dies ist der EmacsWiki-Elisp-Bereich, in dem wir EmacsLisp-Dateien sammeln. Kein Login erforderlich, keine Versionskontrolle erforderlich, kein FTP erforderlich, kein Passwort erforderlich. Es ist so einfach wie das Wiki. Das bedeutet auch, dass jeder in diese EmacsLisp-Dateien bösartigen Code einfügen kann. Verwenden Sie sie im Zweifelsfall nicht.

    Nur damit Sie wissen, bin ich Administrator des Wikis, und meine eigenen Lisp-Bibliotheken im Wiki-Elisp-Bereich sind gesperrte Seiten. Das bedeutet, dass nur ein Wiki-Administrator sie hochladen kann. In diesem Fall können Sie also ziemlich sicher sein, dass meine Bibliotheken, die Sie von MELPA oder Emacs Wiki heruntergeladen haben, von mir hochgeladen wurden. Wie bei allem im Internet gibt es jedoch keine Garantie, so wie es auch beim Code selbst keine Garantie gibt. Wie die GPL-Klappentext in jeder GPL-Bibliothek besagt:

    Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, jedoch OHNE JEGLICHE GARANTIE; auch ohne die implizite Garantie der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Informationen finden Sie in der GNU General Public License.

HTH. Viel Spaß beim Hacken.

Drew
quelle
Sehr beruhigend, da bin ich mir sicher.
Nic Ferrier
1
Lassen Sie mich Ihrer Meinung zu MELPA widersprechen. Der Autor des Pakets „gibt“ nichts an MELPA frei. Er oder sie verpflichtet sich nur zu seinem eigenen Repo, und MELPA übernimmt es. Der Unterschied ist, dass MELPA alles auswählt, während MELPA Stable Releases mit Tags auswählt . Dies ist in der Tat eine Frage der Präferenz. Manche Menschen ziehen es vor, Feature-Verzweigungen immer zu erstellen, Stamm als heilig zu behandeln und durch Zusammenführen zu Stamm zu signalisieren, dass die Änderung bereit ist. Andere entwickeln sich zufällig auf dem Stamm, markieren jedoch fertige Versionen durch explizites Markieren. Beide Ansätze sind sinnvoll ...
Mekk
1
… Persönlich bin ich auf der Tag- Seite, da mir klar ist, wann und warum ich Veröffentlichungen vornehme (und vorläufige Versionen auf Trunk veröffentlichen kann, und ich keine Feature-Verzweigungen für kleine Code-Änderungen vornehmen muss, und Versionsnummern verwenden kann, um geben Sie an, wie groß die Änderungen sind, und erlauben Sie mir, benutzerfreundliche Versionsnummern zu verwenden. Fazit: Solange es Autoren gibt, die Veröffentlichungen mit Tags versehen möchten, hat melpa stable seine Vorzüge - und ich würde sagen, dass es nichts Falsches an Autoren gibt, die Veröffentlichungen mit Tags versehen veröffentlicht werden.
Mekk