GNU Guix

**GNU Guix**, GNU için bir paket yöneticisidir. Nix paket yöneticisini ve Guile Şeması uygulama programlama arayüzlerini taban almıştır. Tümüyle özgür yazılımdır.

## Tarihçesi
* GNU Guix tasarısı Haziran 2012'de bir GNU Guile programcısı olan Ludovic Courtès tarafından başlatılmıştır.
* GNU Tasarısı Kasım 2012'de GNU Guix'in ilk sürümünü duyurmuştur.
* 20 Ağustos 2015'te Guix'in GNU Hurd'a uyarlandığı duyurulmuştur ve Hurd'ün ilk yerli paket yöneticisi olmuştur.

## Özellikler
* Guix kullanılırken her paket kendi dizinindeki bir paket deposunda son bulur, `/gnu/store/xxx-package-1.2` gibi. `xxx` bir base32 değeridir. (Guix bu dosya isimlerini kısaltmak için bir Emacs eklentisiyle birlikte gelir.)
* Her kullanıcı bir *profile* sahiptir ve bu profiller hangi paketlerin kullanılacağını işaret eder. Profiller ayrı ayrı kullanıcıların ana dizininde depolanır, `$HOME/.guix-profile` gibi.

: Örneğin, `orhan` GCC 4.7.2'yi yükler. Bunun sonucunda, kendi dizininde oluşan `/home/orhan/.guix-profile/bin/gcc` dosyası `/gnu/store/...-gcc-4.7.2/bin/gcc`'yi işaret eder. Aynı makinede, `inci` de GCC 4.8.0 yüklemiştir. `inci`'nin profili `/gnu/store/...-gcc-4.8.0/bin`'i işaret etmektedir. Yani, GCC'nin her iki sürümü herhangi bir çatışma olmadan aynı sistem üzerinde bulunabilir.

* `guix package` komutu paketleri yönetmek için merkezi bir araçtır. Kullanıcı bazlı profiller üzerinde çalışır ve sıradan kullanıcı yetkileriyle birlikte kullanılabilir.

: Bu komut; kurma, silme ve yükseltme işlemlerinin tümünü gerçekleştirebilir. Belirtilen süreç başarılı olsa da olmasa da her bir yürütme aslında bir *işlemdir*. Böylelikle, eğer işlem sırasında `guix package` süreci sonlandırılırsa ya da işlem sırasında elektrik kesintisi yaşanırsa kullanıcı profili bir önceki duruma döner ve sistem kullanır halde kalır.

* Herhangi bir paket işlemi *geri döndürülebilir*. Örnek olarak, eğer bir yükseltme ciddi hatalar barındıran bir paketi yüklediyse, kullanıcı kendi profilinin gayet iyi çalışan bir önceki durumuna geri dönebilir. Benzer olarak, genel sistem yapılandırması da transaksiyonel yükseltme ve geri almaya dahildir.
* Paket deposundaki tüm bu paketler bir *çöp yığını* halini alabilir. Guix hangi paketin hala kullanıcı profilleri ile ilişkilendirildiğini bulur ve ilişkilendirilmeyen paketleri siler. Kullanıcılar profillerinin eski sürümlerini silebilir ve bunlarla bağıntılı olan eski paketler de silinmek için işaretlenebilir.
* Sonuçta, Guix *tam anlamıyla işlevsel* bir paket yöneticisidir. Her `/gnu/store` paket dizin ismi; derleyici, kütüphaneler, inşa betikleri gibi bu paketi inşa etmede kullanılan gereksinimlere yazılan girdilerin özetinden oluşur. Bu, belirlenen paket kurulumunun kullanıcının dağıtımın mevcut durumuna uygunluğunu denetleyebilmesini sağlar. Ayrıca bu, *inşanın yeniden üretilebilirliği*nin azami düzeye çıkmasına yardımcı olur.
* Bir `/gnu/store` öğesi için önceden derlenmiş ikili dosyanın harici bir kaynakta bulunması halinde Guix sadece indirir ve verileri dışa çıkartır, bunun dışında yerel olarak, bir paketi kaynağından inşa edebilir.
* İnşa ortamında denetim özelliği geliştiriciler için oldukça kullanışlıdır. `guix environment` komutu paket geliştiricilerinin paketleri için doğru inşa ortamını hızlıca kurmalarını sağlar, bu özellik sayesinde her geliştirici ayrı ayrı paket bağımlılıklarını kendi profiline kurmak zorunda kalmaz.

## Guix System Distribution

Guix tasarısı ayrıca Guix System Distribution'ı geliştirir. Bu dağıtım Linux-libre çekirdeğini ve GNU Shepherd başlatma sistemini kullanır ve tümüyle yüklenebilir bir GNU sistemidir.

## Kaynakça