Apa perbedaan praktis antara berbagai Repositori Paket Emacs?

124

Saya perhatikan bahwa ada beberapa repositori berbeda yang sering berisi perangkat lunak yang sama. Mengapa saya ingin memilih:

  • GNU ELPA
  • Selai jeruk
  • MELPA

atas yang lain? Karena satu repositori tidak berisi semua paket yang saya inginkan, apakah ide yang bagus untuk mengaktifkan repositori ini secara bersamaan?

Eric Brown
sumber

Jawaban:

82

GNU ELPA adalah repositori paket GNU Emacs resmi. Ini satu-satunya yang diaktifkan secara default, yang artinya memiliki jangkauan terbesar. Pada saat yang sama, mengirimkan paket ada sedikit kerumitan dan memerlukan penugasan hak cipta FSF, yang berarti ia memiliki pilihan paket yang relatif terbatas.

MELPA dan Marmalade keduanya adalah repositori paket pihak ketiga. Mereka tidak secara resmi didukung oleh GNU, tetapi juga memiliki banyak pilihan paket. Kualitas paket sedikit lebih bervariasi, tetapi Anda jauh lebih mungkin untuk menemukan apa pun yang Anda cari, terutama jika agak tidak jelas.

Marmalade dan MELPA memiliki model yang sedikit berbeda untuk pengunggah paket. Pemahaman saya adalah bahwa MELPA melacak repositori kontrol versi secara langsung (yaitu melalui GitHub), membiarkan pembuat paket memperbarui paket hanya dengan mendorong komit ke cabang. Marmalade, di sisi lain, meminta orang mengunggah paket ke repositori secara eksplisit.

Dalam praktiknya, saya belum melihat banyak perbedaan antara MELPA dan Marmalade. Tidak ada banyak kerugian untuk memungkinkan keduanya memiliki pilihan paket instalable terbesar yang mungkin: Saya telah menggunakan keduanya (dan GNU ELPA, tentu saja) untuk sementara waktu tanpa masalah yang berarti.

Satu kemungkinan kekhawatiran (yang belum saya temukan pada diri saya) dengan mengaktifkan kedua repositori, yang belum saya temui, adalah memiliki paket yang tersedia dari keduanya pada versi yang berbeda. Secara default, manajer paket ( package.el) tidak memiliki cara untuk menyelesaikan konflik seperti ini; Namun, Anda dapat menyelesaikan ini dengan menginstal melpapaket yang memungkinkan Anda menyesuaikan paket mana yang disediakan atau dikecualikan dari repositori mana. Anda dapat melihat detail lebih lanjut di sini atau dari dokumentasi untuk melpapaket.

Seperti yang ditunjukkan oleh @Malabarba, masalah ini diselesaikan dalam Emacs 24.4.

Jika Anda benar-benar khawatir tentang keamanan, Anda mungkin ingin menghindari MELPA dan Marmalade karena mereka membiarkan siapa pun mengunggah paket dan, sejauh yang saya tahu, tidak memiliki pengaturan keamanan proaktif. Repositori GNU ELPA, di sisi lain, dikelola oleh FSF dan telah menandatangani paket yang akan membantu. Tentu saja, jika keamanan sangat penting, Anda mungkin ingin meninjau dan menginstal paket-paket elisp dengan tangan alih-alih menggunakan manajer paket.

Tikhon Jelvis
sumber
13
Package.el baru yang hadir dalam emacs 24.4 menangani angka versi yang berbeda dengan anggun. Jika dua repo memiliki paket yang sama dengan versi yang berbeda, Anda ditawari keduanya, dan satu tidak akan pernah menimpa yang lain selama pembaruan.
Malabarba
1
@Malabarba: Wow, senang mendengarnya!
Tikhon Jelvis
14
Ini adalah jawaban yang baik tetapi mungkin juga harus menyebutkan stabil MELPA ( melpa-stable.milkbox.net ). MELPA akan secara otomatis mendapatkan revisi terbaru dari cabang utama repo, sementara MELPA stable akan mendapatkan revisi yang ditandai baru-baru ini.
shosti
@shosti: Oh rapi, saya tidak tahu tentang itu. Mungkin lebih baik mengatakan itu sebagai jawabannya sendiri.
Tikhon Jelvis
7
marmalade tidak mengizinkan siapa pun untuk mengunggah paket. hanya pengguna terdaftar. Saya tahu semua pengunggah sekarang. Jadi ada semacam peer review.
nic ferrier
44

Cara saya berpikir tentang itu, beberapa repo memiliki lebih banyak overhead yang terlibat dengan mengirimkan paket daripada yang lain; repo dengan overhead yang lebih banyak cenderung memiliki lebih sedikit paket. Agar dari biaya overhead paling rendah:

  1. GNU ELPA mengharuskan semua kode menjadi GPL dan hak cipta diberikan kepada FSF. Kode ELPA pada dasarnya "dimiliki" oleh tim inti Emacs, jadi ada jauh lebih sedikit daripada dengan repo lain. (Mode org memiliki repo sendiri, tetapi memiliki mode operasi yang sama.)
  2. Marmalade mengharuskan semua kode memiliki lisensi yang kompatibel dengan GPL dan semua paket diunggah secara manual. Kepemilikan sedikit tidak ditentukan, dan mengubah kepemilikan tidak memiliki proses yang ditetapkan AFAIK.
  3. MELPA Stable kurang lebih bersaing langsung dengan Marmalade, kecuali ia tidak memiliki batasan lisensi dan secara otomatis membuat paket dari repo git menggunakan revisi tag terbaru. Kepemilikan ditentukan melalui repo MELPA (perubahan kepemilikan terjadi melalui permintaan tarik).
  4. MELPA seperti MELPA stable kecuali selalu menarik dari revisi terbaru pada cabang master dari git repo. Paket-paket tersebut cenderung "edge-edge", dan itu bisa menjadi sedikit bebas untuk semua stabilitas-bijaksana (yang memiliki pro dan kontra).

Secara pribadi saya pikir MELPA Stable atau Marmalade mungkin akan menang dalam jangka panjang bagi sebagian besar pengguna — MELPA yang tepat sangat tidak stabil dan ELPA terlalu ketat untuk benar-benar dapat diskalakan untuk banyak paket. Tapi itu hanya pendapat saja.

shosti
sumber
6
marmalade sekarang memiliki API untuk menambahkan pemilik ke paket.
nic ferrier
31

Ada beberapa repositori paket yang tersedia.

Resmi

GNU ELPA adalah repo paket resmi. Ini kecil, dan membutuhkan penugasan hak cipta (dari semua penulis paket) ke FSF untuk berkontribusi padanya.

Paket-paket pada GNU ELPA benar-benar hanya repo git . Keuntungan dari di-host di sini adalah bahwa tim inti mencoba memperbarui paket jika Emacs sendiri menambah atau mengurangi fitur.

Dibangun dari sumber

MELPA adalah repo paket terbesar dan paling cepat berkembang . Ini merilis versi baru setiap kali versi baru didorong ke repo, atau halaman EmacsWiki diperbarui.

Ini ujung yang berdarah, tetapi bekerja dengan sangat baik dalam praktik. MELPA dikuratori untuk menghindari paket duplikat, dan untuk memastikan bahwa rumah kanonik paket dicatat (bukan garpu acak).

MELPA memang memiliki masalah bahwa versi hanya cap waktu, misalnya my-package-20131231.2359. Ini berarti jika Anda bergantung pada paket saya:

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

maka Emacs akan berpikir bahwa versi apa pun pada MELPA cukup baru.

MELPA Stable sama dengan MELPA, tetapi daripada menggunakan versi datestamp, ia menggunakan versi dalam tag git. Ini memungkinkan resolusi ketergantungan yang lebih baik, tetapi memiliki masalah dengan bergantung pada paket wiki .

Unggahan pengguna

Marmalade jauh lebih mirip dengan repositori tradisional dari bahasa pemrograman lain. Pengembang paket mengunggah paket ke Marmalade ketika mereka melakukan rilis.

Pada prinsipnya, ini memberikan paket proses rilis yang tepat (Marmalade mendahului MELPA stable) dan juga menghindari masalah nomor versi yang di-autogenerasi. Namun, tidak ada verifikasi identitas. Siapa pun dapat mengunggah paket, bahkan jika mereka tidak menulisnya. Ini menjadi sulit jika pengelola my-packagemenemukan bahwa orang lain mengunggah my-packagedan selanjutnya tidak dapat mengunggah versi baru.

Marmalade dulunya adalah aplikasi node.js, dan sekarang ditulis dalam elisp. Kedua versi terkadang mengalami masalah waktu aktif.

Khusus proyek

Org-mode ELPA adalah repo yang hanya menampung orgdan org-plus-contrib. Org-mode adalah bagian dari inti Emacs, tetapi itu dikembangkan secara eksternal dan kode hanya disinkronkan dengan batang Emacs secara berkala. Repo ini memungkinkan Anda memiliki mode org yang berdarah.

User42 ELPA adalah repo untuk pengembang paket tunggal yang telah merilis cukup banyak paket Emacs . Jika Anda menyukai salah satu paketnya, Anda dapat menambahkan repo ini.

Sunrise Commander ELPA adalah repo untuk ekstensi untuk Sunrise Commander (paket Emacs untuk penelusuran file, terinspirasi oleh komandan tengah malam).

Pensiunan

ELPA Tromey adalah repo pertama yang didirikan. Secara resmi diganti dengan GNU ELPA, tetapi tidak memiliki persyaratan penugasan hak cipta yang sama. Pada 2010, tidak lagi diperbarui.

Arsip paket Elpy berisi berbagai paket yang dikembangkan oleh Jorgen Schaefer untuk 'Elpy, the Emacs Python Development Environment' , tetapi itu telah bermigrasi ke MELPA Stable.

Wilfred Hughes
sumber
4
marmalade pasti memiliki masalah waktu aktif ... Saya yakin saya telah menyelesaikannya dengan nic.ferrier.me.uk/blog/2014_08/deploying-blue-green-with-docker - tidak ada yang menyebutkan risiko terlibat dalam menggunakan github , penyedia komersial perangkat lunak berbasis web, sebagai backend; Saya percaya itu adalah risiko. Marmalade adalah perangkat lunak gratis dan bahkan yang dibangun dapat diinstal oleh orang lain.
nic ferrier
no one has mentioned the risks involved in using github, a commercial provider of web based software, as a backend: tapi saya yakin kekhawatiran itu akan hilang sekarang karena itu Microsoft GitHub ;-)
TomRoche
13

Beberapa info tambahan, untuk melengkapi jawaban lain di sini.

  1. Beberapa info tentang MELPA dan MELPA "stable" -

    Mulailah dengan melihat pertanyaan duplikat yang cukup banyak ini , dari StackOverflow, termasuk komentar untuk pertanyaan itu sendiri. Secara khusus, komentar ini yang saya posting, setelah bertukar email dengan Donald Curtis (pengelola MELPA dan MELPA stable):

    Dari sudut pandangnya [Donald Curtis, dan seperti yang saya mengerti komunikasinya kepada saya], situs MELPA "stabil" hanya dalam mode pemeliharaan . Dan satu-satunya alasan kode seperti milik saya tidak ada adalah karena tidak ada yang menerapkan pengunggahan dari wiki [Emacs Wiki] untuk situs "stable". Juga, tidak ada "kurasi" yang dilakukan oleh siapa pun - tidak ada penyaringan untuk menentukan apakah suatu paket stabil, berisiko, dll. Keberadaan dua situs diminta oleh beberapa pengembang paket yang ingin membedakan versi dev paket mereka dari yang lebih lama ("stable ") versi.

    Singkatnya, tidak ada yang secara inheren lebih "stabil" tentang konten pada "MELPA stable" . Metode penomoran versi dan umpan bisa berbeda; itu saja. Dan jika pengelola paket tertentu ingin membedakan versi "stabil" dari versi "pengembangan", dan ingin melakukannya dengan mengunggahnya ke dua situs yang berbeda, maka itulah efeknya - untuk paket itu .

  2. Satu perbedaan antara MELPA dan Marmalade (dan GNU ELPA) adalah bahwa tidak diperlukan bahwa kode yang berkontribusi pada MELPA bersumber dari repositori git. Secara khusus, ini dapat ditarik secara otomatis dari Area Elisp di Emacs Wiki .

    Apakah itu berarti, seperti yang dikatakan beberapa orang, bahwa siapa pun dapat mengunggah apa pun, dan Anda tidak memiliki cara untuk mengetahui apakah kode tersebut sebenarnya oleh penulis yang diklaim, dll? Iya dan tidak. Secara umum, ya: siapa pun bebas mengunggah kode Elisp ke Emacs Wiki. Seperti yang dikatakan bagian atas halaman Area-Elisp:

    Ini adalah area elac EmacsWiki, tempat kami mengumpulkan file EmacsLisp. Tidak perlu masuk, tidak perlu kontrol versi, tidak perlu ftp, tidak perlu kata sandi. Sesederhana wiki itu sendiri. Itu juga berarti bahwa siapa pun dapat menempatkan kode berbahaya di file EmacsLisp ini. Jika ragu, jangan gunakan itu.

    Namun, supaya Anda tahu, saya adalah administrator wiki, dan perpustakaan Lisp saya sendiri di Area Elisp wiki adalah halaman yang dikunci. Itu berarti bahwa hanya administrator wiki yang dapat mengunggahnya. Jadi dalam hal ini, Anda dapat yakin bahwa perpustakaan saya yang Anda unduh dari MELPA atau Emacs Wiki diunggah oleh saya. Seperti halnya semua yang ada di Internet, tidak ada jaminan yang pasti, seperti halnya tidak ada jaminan dengan kode itu sendiri. Seperti yang dikatakan oleh GPL di setiap perpustakaan GPL:

    Program ini didistribusikan dengan harapan akan bermanfaat, tetapi TANPA GARANSI APA PUN; bahkan tanpa jaminan tersirat DAGANG atau KECOCOKAN UNTUK TUJUAN TERTENTU. Lihat Lisensi Publik Umum GNU untuk detail lebih lanjut.

HTH. Selamat melakukan peretasan.

Drew
sumber
Saya sangat yakin.
nic ferrier
1
Biarkan saya tidak setuju dengan pendapat MELPA Anda. Penulis paket tidak "melepaskan" apa pun ke MELPA. Dia hanya berkomitmen untuk repo sendiri, dan MELPA mengambilnya. Perbedaannya adalah bahwa MELPA mengambil apa saja, sedangkan MELPA stabil memilih rilis yang ditandai . Ini sebenarnya masalah preferensi. Beberapa orang lebih suka untuk selalu membuat cabang fitur, memperlakukan trunk sebagai sakral, dan menandakan bahwa perubahan siap dengan menggabungkan ke trunk. Yang lain kebetulan mengembangkan di trunk tetapi menandai rilis siap dengan penandaan eksplisit. Kedua pendekatan itu masuk akal ...
Mekk
1
... secara pribadi saya berada di pihak penandaan karena memberi saya jelas kapan dan mengapa saya membuat rilis (dan memungkinkan untuk menerbitkan versi awal pada trunk, dan menghindari kebutuhan untuk membuat cabang fitur untuk perubahan kode kecil, dan memungkinkan saya untuk menggunakan nomor versi untuk memberi sinyal seberapa besar perubahannya, dan izinkan saya menggunakan nomor versi yang ramah manusia). Intinya: selama ada penulis yang lebih suka menandai rilis, melpa stable memiliki kelebihannya - dan saya akan mengatakan tidak ada yang salah dalam penulis yang mengelola rilis dengan menandai, sebaliknya, itu berarti dia peduli untuk berpikir kapan dan apa yang harus dilepaskan.
Mekk