Çeşitli Emacs Paketi Depoları arasındaki pratik farklar nelerdir?


124

Aynı yazılımı içeren birkaç farklı havuz olduğunu fark ettim. Neden tercih etmek isteyeyim:

  • GNU ELPA
  • Marmelat
  • MELPA

diğerlerine göre? Herhangi bir depo istediğim tüm paketleri içermediğinden, bu depoları aynı anda etkinleştirmek iyi bir fikir midir?

Yanıtlar:


82

GNU ELPA resmi GNU Emacs paket deposudur. Varsayılan olarak etkin olan tek kişidir; bu, en büyük erişime sahip olduğu anlamına gelir. Aynı zamanda, bir paket göndermek de biraz güçlük çekiyor ve bir FSF telif hakkı ataması gerektiriyor, bu da nispeten sınırlı bir paket seçimine sahip olduğu anlamına geliyor.

MELPA ve Marmalade , üçüncü taraf paket depolarıdır. Resmi olarak GNU tarafından desteklenmiyor, aynı zamanda çok daha geniş bir paket seçeneğine de sahipler. Paket kalitesi biraz daha değişkendir, ancak aradığınız şeyi bulma olasılığınız çok daha yüksektir, özellikle de biraz karanlıksa.

Marmelat ve MELPA'nın paket yükleyiciler için biraz farklı modelleri var. Anladığım kadarıyla, MELPA'nın bir sürüm kontrol deposunu doğrudan (yani GitHub aracılığıyla) izlemesi, paket yazarlarının paketleri bir şubeye göndererek güncelleme yapmasına izin veriyor. Öte yandan, Marmalade, insanların depoya paketleri açıkça yükleyebilmesini sağlar.

Uygulamada, MELPA ve Marmelat arasında fazla bir fark görmedim. Her ikisinin de mümkün olan en fazla kurulabilir paket seçimine sahip olmalarını sağlamanın pek dezavantajı yoktur: Her ikisini de (ve GNU ELPA'yı elbette) önemli bir sorun olmadan kullanıyorum.

Kendi kendime girmediğim her iki havuzun da etkinleştirilmesiyle (kendime rastlamadığım) olası bir endişe, her ikisinden de farklı versiyonlarda mevcut olan paketlerin bulunmasıdır. Varsayılan olarak, paket yöneticisi ( package.el) böyle bir çatışmayı çözmenin bir yolunu yoktur; ancak bunu, melpahangi paketlerin sağlandığını veya hangi havuzlardan dışlandığını özelleştirmenize izin veren paketi yükleyerek çözebilirsiniz . Daha fazla ayrıntıyı burada veya melpapaketin belgelerinde görebilirsiniz .

@Malabarba'nın dikkatlice işaret ettiği gibi, bu sorun Emacs 24.4'te çözülmüştür.

Güvenlik konusunda gerçekten endişeleniyorsanız, hem MELPA hem de Marmelat'tan kaçınmak isteyebilirsiniz, çünkü herhangi birinin paketleri yüklemesine izin verir ve bildiğim kadarıyla, proaktif bir güvenlik düzenlemesi yoktur. GNU ELPA deposu ise, FSF tarafından yönetiliyor ve yardım etmesi gereken paketleri imzaladı. Elbette, güvenlik gerçekten önemliyse, paket yöneticisini kullanmak yerine elisp paketlerini el ile gözden geçirmek ve kurmak isteyebilirsiniz.


13
Emacs 24.4'te gelen yeni package.el, farklı sürüm numaralarını incelikle ele alıyor. İki repo farklı sürüme sahip aynı pakete sahipse, ikisine de sunulur ve bir güncelleme sırasında biri diğerini geçersiz kılmaz.
Malabarba

1
@ Malabarba: Vay, bunu duymak harika!
Tikhon Jelvis

14
Bu iyi bir cevaptır, ancak muhtemelen MELPA'nın kararlı olduğunu da belirtmeliyiz ( melpa-stable.milkbox.net ). MELPA otomatik olarak en son revizyonu bir repo ana şubesinden alırken, MELPA kararlı en son etiketli revizyonu alır.
shosti

@shosti: Oh, temiz, bunu bilmiyordum. Aslında bunu kendi cevabı olarak koymak iyi olabilir.
Tikhon Jelvis

7
marmelat, kimsenin paket yüklemesine izin vermiyor. sadece kayıtlı kullanıcılar. Şu an tüm yükleyicileri tanıyorum. Yani bir çeşit akran değerlendirmesi var.
feribot

44

Bunu düşündüğüm gibi, bazı repolar paket göndermeyi diğerlerine göre daha fazla harcadı; daha fazla ek yüke sahip depolar daha az pakete sahip olma eğilimindedir. En çok en az ek yüke geçmek için:

  1. GNU ELPA , tüm kodların GPL'ye ve FSF'ye atanan telif haklarına sahip olmasını gerektirir. ELPA kodu esasen çekirdek Emacs ekibine "ait", bu nedenle diğer depolardan çok daha az var. (org-mode'un kendi deposu var, ancak aynı işletim moduna sahip.)
  2. Marmelat , tüm kodların GPL uyumlu bir lisansa sahip olmasını gerektirir ve tüm paketler manuel olarak yüklenir. Mülkiyet biraz belirtilmemiş ve mülkiyetin değişen bir AFAIK süreci yok.
  3. MELPA Stable , Marmalade ile doğrudan rekabet halindedir, ancak lisans kısıtlamaları yoktur ve en son etiketli revizyonu kullanarak git depolarından otomatik olarak paketler oluşturur. MELPA deposu ile mülkiyet belirlenir (mülkiyet değişikliği çekme talebi ile gerçekleşir).
  4. MELPA , her zaman bir git repo'nun ana şubesinde yapılan en son revizyondan çıkması haricinde MELPA'ya benzer. Paketler "kanama kenarı" olma eğilimindedir ve bir miktar herkes için ücretsiz bir istikrar kazanabilir (artıları ve eksileri vardır).

Şahsen, çoğu kullanıcının MELPA Stable veya Marmalade'in muhtemelen uzun vadede kazanacağını düşünüyorum - MELPA uygun oldukça dengesiz ve ELPA birçok paket için gerçekten ölçeklendirilemeyecek kadar kısıtlayıcı. Ama bu sadece bir fikir.


6
marmelat artık sahiplerine paket eklemek için API kullanıyor.
nic feribot,

31

Çeşitli paket havuzları mevcuttur.

Resmi

GNU ELPA resmi paket deposudur. Küçüktür ve katkıda bulunmak için FSF'ye (bir paketin tüm yazarlarının) telif hakkı tahsis edilmesini gerektirir.

GNU ELPA'daki paketler gerçekten sadece bir git repo . Burada barındırılmanın avantajı, Emacs'in kendisi ekler veya kullanımdan kaldırırsa, çekirdek ekibin paketleri güncellemeye çalışmasıdır.

Kaynaktan inşa

MELPA en büyük ve en hızlı büyüyen paket deposudur . Her yeni sürümde bir repoya basıldığında veya bir EmacsWiki sayfası güncellendiğinde yeni bir sürüm çıkarır.

Kanama kenarı, ancak pratikte çok iyi çalışıyor. MELPA, çift paketlerden kaçınmak ve kanonik paket evinin kaydedilmesini sağlamak için (rastgele bir çatal yerine) küratörlüğünü yapar.

MELPA, versiyonların sadece zaman damgası gibi bir problemi var my-package-20131231.2359. Bu benim paketime bağlı olduğun anlamına gelir:

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

Sonra Emacs MELPA'daki herhangi bir sürümün yeterince yeni olduğunu düşünecek.

MELPA Kararlı , MELPA ile aynıdır, ancak datetamp sürümleri kullanmak yerine, git etiketlerindeki sürümleri kullanır. Bu, daha iyi bağımlılık çözümüne izin verir, ancak wiki paketlerine bağlı olarak sorunları vardır .

Kullanıcı yüklemeleri

Marmelat , diğer programlama dillerinden geleneksel bir depoya çok benziyor. Paket geliştiricisi, paketi bıraktıklarında paketi Marmalade'e yükler.

Prensip olarak, bu paketlere uygun bir bırakma işlemi verir (Marmelat, MELPA'yı dengede tutar) ve ayrıca otomatikleştirilmiş versiyon numarası probleminden de kaçınır. Ancak kimlik doğrulaması yoktur. Herkes yazmamış olsa bile bir paket yükleyebilir. my-packageSağlayıcı, başka birinin yüklediğini bulur my-packageve ardından yeni sürümleri yükleyemezse zorlaşır .

Marmelat bir node.js uygulamasıydı ve şimdi elisp ile yazılmıştır. Her iki sürümde de zaman zaman çalışma sorunları yaşanıyor.

Proje özgü

Org modu ELPA bir Repo sadece ana olduğunu orgve org-plus-contrib. Org modu Emacs çekirdeğinin bir parçasıdır, fakat harici olarak geliştirilmiştir ve kod yalnızca periyodik olarak Emacs trunk ile senkronize edilir. Bu repo, kanama kenarı org moduna sahip olmanızı sağlar.

User42 ELPA , oldukça çeşitli Emac paketleri sunan tek bir paket geliştiricisinin deposudur . Paketlerinden herhangi birini seviyorsanız, bu repoyu ekleyebilirsiniz.

Sunrise Komutanı ELPA , Sunrise Komutanı (gece yarısı komutanı esinlenerek dosya taraması için bir Emacs paketi) eklentileri için bir repo .

Emekli

Tromey'nin ELPA'sı ilk repo oldu. Resmen GNU ELPA ile değiştirildi, ancak aynı telif hakkı atama şartlarına sahip değildi. 2010 itibariyle, artık güncellenmiyor.

Elpy paket arşivi , Jorgen Schaefer tarafından 'Emacs Python Geliştirme Ortamı Elpy için ' geliştirilen , ancak MELPA Stable'a göç eden çeşitli paketler içeriyordu .


4
marmelat kesinlikle çalışma süresi sorunları yaşadı ... Onları nic.ferrier.me.uk/blog/2014_08/deploying-blue-green-with-docker ile çözdüğüme inanıyorum - hiç kimse github kullanımının risklerinden bahsetmedi bir arka uç olarak web tabanlı bir yazılımın ticari sağlayıcısı; Bunun bir risk olduğuna inanıyorum. Marmelat ücretsiz bir yazılımdır ve yerleşik şey başkası tarafından da yüklenebilir.
nic feribot,

no one has mentioned the risks involved in using github, a commercial provider of web based software, as a backend: ama eminim ki bu endişeler artık ortadan kalkacak, çünkü Microsoft GitHub ;-)
TomRoche

13

Bazı ek bilgiler, buradaki diğer cevapları desteklemek için.

  1. MELPA ve MELPA "stable" hakkında bazı bilgiler -

    Sorunun kendisinin yorumları da dahil olmak üzere, StackOverflow'tan bu oldukça yinelenen soruya bakarak başlayın . Özellikle, Donald Curtis ile e-posta alışverişinde bulunduktan sonra (MELPA ve MELPA'nın sağlayıcısı)

    Onun bakış itibaren [Bana onun iletişimini anlama Donald Curtis adlı ve aynı], "kararlı" MELPA sitesi olduğu bakım modunda sadece . Ve benimki gibi kodun tek nedeni , "kararlı" site için wiki'den [Emacs Wiki] yükleme yapmadığıdır . Ayrıca, hiç kimse tarafından yapılan "iyileştirme" yapılmaz - bir paketin istikrarlı, riskli olup olmadığına karar vermek için filtreleme yoktur. Paketlerinin geliştirme sürümlerini eskilerinden ayırmak isteyen bazı paket geliştiricileri tarafından iki sitenin varlığı istenmiştir. ") sürümleri.

    Özetle, "MELPA kararlı" içeriği ile ilgili doğal olarak daha "kararlı" olan hiçbir şey yoktur . Sürüm numaralandırma ve besleme yöntemi farklı olabilir; bu kadar. Ve eğer belirli bir paket sorumlusu “kararlı” kelimesini “gelişme” versiyonlarından ayırt etmek istiyorsa ve bunu iki farklı siteye yükleyerek yapmak istiyorsa, o zaman bunun etkisi budur .

  2. MELPA ve Marmelat (ve GNU ELPA) arasındaki bir fark, MELPA'ya katkıda bulunan kodun bir git deposundan kaynaklanması gerekmemesidir. Özellikle, Emacs Wiki'nin Elisp Alanından otomatik olarak çekilebilir .

    Bu, bazılarının söylediği gibi, herhangi birinin bir şey yükleyebileceği ve kodun gerçekten talep edilen yazar tarafından olup olmadığını bilmediğiniz anlamına mı geliyor? Evet ve hayır. Genel olarak, evet: herkes Elisp kodunu Emacs Wiki'ye yükleyebilir. Elisp-Area sayfasının üst kısmında yazdığı gibi:

    Burası EmacsLisp dosyalarını topladığımız EmacsWiki elisp alanı. Giriş gerekmez, sürüm kontrolü gerekmez, ftp gerekmez, şifre gerekmez. Wiki'nin kendisi kadar basit. Bu, herkesin bu EmacsLisp dosyalarına kötü amaçlı kod yerleştirebileceği anlamına gelir. Şüpheniz varsa, bunları kullanmayın.

    Ancak, bildiğiniz gibi, wiki'nin yöneticisiyim ve wiki Elisp Alanındaki kendi Lisp kütüphanelerim kilitli sayfalardır. Bu, yalnızca bir wiki yöneticisinin onları yükleyebileceği anlamına gelir. Bu durumda, MELPA veya Emacs Wiki'den indirdiğiniz kütüphanelerimin benim tarafımdan yüklendiğinden emin olabilirsiniz. Bununla birlikte, İnternet üzerindeki her şeyde olduğu gibi, kodun kendisinde bir garanti olmadığı gibi, ironclad garantisi yoktur. Her GPL kütüphanesinde GPL'nin belirttiği gibi:

    Bu program faydalı olacağı umuduyla dağıtılmıştır, ancak HİÇBİR GARANTİ YOKTUR; HİÇBİR AMAÇLI OLMAK İÇİN TİCARİRLİK veya FİTNESS'in zımni garantisi olmadan. Daha fazla bilgi için GNU Genel Kamu Lisansına bakınız.

HTH. Mutlu hackler


çok güven verici eminim.
feribot,

1
MELPA görüşünüze katılmıyorum. Paket yazarı MELPA'ya hiçbir şey “bırakmaz”. O sadece kendi repo için taahhüt eder ve MELPA onu alır. Aradaki fark, MELPA'nın bir şey seçmesi ve MELPA'nın kararlı etiketli sürümleri seçmesidir . Bu aslında bir tercih meselesidir. Bazı insanlar her zaman özellik dalı yapmayı, gövdeye kutsal davranmayı ve değişimin gövdeye birleştirilerek hazır olduğunu işaret ederler. Diğerleri bagajda gelişir ancak hazır etiketleme ile hazır sürümleri işaretler. Her iki yaklaşım da mantıklı…
Mekk

1
… Kişisel olarak Ne zaman ve neden serbest bıraktığımı açıkça belirttiğim gibi etiketleme tarafındayım (ve bagajda ön sürümleri yayınlamama izin veriyor ve küçük kod değişiklikleri için özellik dalları oluşturma ihtiyacını önlüyor ve sürüm numaralarını kullanmama izin veriyor.) değişikliklerin ne kadar büyük olduğunu bildir ve insan dostu sürüm numaralarını kullanmama izin ver). Sonuç olarak: bültenleri etiketlemeyi tercih eden yazarlar olduğu sürece, melpa istikrarı hak eder - ve yazarın bültenlerini etiketleyerek yöneten yanlış bir şey olmadığını söylerim, aksine, ne zaman ve neyin düşünmesi gerektiğini düşünmesi gerektiği anlamına gelir. serbest bırakılmak.
Mekk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.