12 October 2011

Neden Homebrew Kullanmalıyız?

Homebrew, bana göre Mac OS X kullanan geliştiriciler için biçilmiş kaftan, kafa rahatlığı veren bir paket yöneticisidir. Kendi geliştirme ortamınızı kurmak için en kolay araçtır. Başlıktaki soruya cevap vermeden önce, kararımı Homebrew'den yana kullanmama sebep olan alışkanlıklarımdan bahsedeyim. Ben işlerimi Python'da virtualenv veya Ruby'de rbenv gibi sanallaştırma yöntemleri kullanarak yapıyorum ve dile özel bir yazılım yükleme ihtiyacım olduğunda her zaman o dile has popüler paket yöneticisini kullanmayı tercih ediyorum; Python için pip, Ruby için gem, Nodejs için npm, Erlang için agner ve bunun gibi...

Mac OS X'te bir paket yöneticisi seçerken bence kesinlikle şunlara göre karar vermemeliyiz:

  • Paket sayısı, Mac OS X kullanıcıları için anlamsız bir ayrıntıdır. İhtiyaç duyabileceğimiz uygulamalar Mac OS X'te çoğu zaman kolay kurulabilir olarak bizzat yazar(lar)ı tarafından arşivlenip o şekilde sunulur, örneğin Transmission. Hatta depoda ne kadar az paket olursa, komünitenin iş gücü o kadar güçlü, hesaplı ve kaliteli olur.
  • Derlenmiş paket desteği bence önemsiz; çünkü birinci maddede dediğime benzer olarak, derlemesi uzun süren yazılımların çoğu zaman arşivlenmiş, derlenmiş hali internette vardır. Örneğin LibreOffice, Qt, Gimp gibi.
  • Paket yöneticisinin neyden ilham aldığı da önemsiz. BSD'nin ports'u çok güçlü olabilir; ama Mac OS X'te ports bence çok işlevsiz; çünkü genel olarak yazılım derleme flagleri ile oynaşma, gcc yerine clang kullanma, gereksiz özellikleri kapatma gibi spesifik ihtiyaçlarınız olmayacak. Olsa zaten BSD kullanırsınız. Fink de aynı şekilde size Mac OS X'te Debian'ın gücünü malesef gösteremeyecek.

Bence bizim bir geliştirici olarak doğru paket yöneticisini seçebilmemiz için şu sorulara cevap aramalıyız:

  • Paket yöneticisinin gelişim süreci ve komünitesi dışarıya ne kadar açık?
  • Paket yapmak için hangi dili bilmek gerekiyor?
  • Hangi paketlerin nasıl paketleneceği ile ilgili politikaları nasıl?
  • Paket yöneticisi ne kadar basit?

Bu sorulara Homebrew en güzel cevapları veriyor. Kullanımı ve parametreleri oldukça basit; örneğin güncelleme yapmak için brew upgrade, yazılım aramak için brew search <app_name> yazmak yeterli. Homebrew'in tüm paketleme süreci Github deposu üzerinden yürüyor, bu da paket durumunu takip etmeyi ve katkı vermeyi kolaylaştırıyor. Yorumlamalı dillerin kitaplıkları, kurulması ve derlenmesi zor olmadığı sürece paket yönetimi, o dillerin en popüler paket yöneticilerine bırakılıyor. Homebrew deposuna paket katkısı yapmak için veya sorunları düzeltmek için biraz diğer paketlerden referans almak, az biraz Ruby bilmek ve pek tabi derlemeyi de öğrenmek yeterli oluyor. Örneğin, wget kurmak için gerekli inşa dosyası şu şekilde yazılmış:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require 'formula'

class Wget < Formula
  homepage 'http://www.gnu.org/software/wget/'
  url 'http://ftpmirror.gnu.org/wget/wget-1.13.4.tar.bz2'
  md5 '12115c3750a4d92f9c6ac62bac372e85'

  depends_on "openssl" if MacOS.leopard?
  depends_on "libidn" if ARGV.include? "--enable-iri"

  def options
    [["--enable-iri", "Enable iri support."]]
  end

  def install
    args = ["--disable-debug",
            "--prefix=#{prefix}",
            "--with-ssl=openssl"]

    args << "--disable-iri" unless ARGV.include? "--enable-iri"

    system "./configure", *args
    system "make install"
  end
end

Diğer paket yöneticileriyle kıyaslama yapmak açısından pek sağlıklı olmasa da, Github'da en çok takip edilen depolar arasında listede yer aldığını (an itibariyle 6. sırada görünüyor) belirtmekte fayda var.