Flox 1.0 – Nix ile açık kaynak geliştirme ortamlarını kodla tanımlama
(github.com/flox)- Flox, mühendislik ekipleri için bir yazılım ortamı platformudur; geliştirici dizüstü bilgisayarından CI ve prodüksiyona kadar aynı şekilde yeniden üretilebilen ortamları tek bir manifest ile yönetir
- Temeli Nix olsa da Nix bilgisi isteğe bağlıdır; bildirimsel manifest ve kriptografik olarak sabitlenmiş içerik hash girdileriyle ortam drift’ini azaltan bir yapıya sahiptir
- macOS, Linux ve Windows WSL2 üzerinde çalışır; Nixpkgs’deki 120.000’den fazla paketi arayıp kurabilir ve kendi yazılımınızı yeniden üretilebilir paketler olarak derleyip yayımlayabilirsiniz
flox init,flox install,flox activateakışıyla proje bazlı izole ortamlar oluşturur; etkinleştirildiğinde araçlar görünür, çıkıldığında kaybolur ve sistemi temiz tutar- FloxHub paylaşımı, OCI imajı oluşturma, servis çalıştırma, SBOM·CVE yamalama·SCA ve AI kodlama ajanları için deterministik yürütme ortamı dahil olmak üzere kurum ölçeğinde ortam yaşam döngüsü yönetimine odaklanır
Flox’un çözmeye çalıştığı sorun
- Flox, geliştirme ortamını tek bir dosyada tanımlayıp aynı ortamın geliştirici dizüstü bilgisayarında, CI’da ve prodüksiyonda çalışmasını sağlayan bir platformdur
- Geleneksel paket yöneticileri tek bir makinede paket kurulumuna odaklanırken, Flox kurum genelindeki paket ve ortam yaşam döngüsünü yönetir
- Üç temel özelliği vardır
- Bildirimsel: Proje için gereken araçları, ortam değişkenlerini ve servisleri tek bir dosyada açıklar
- Yeniden üretilebilir: Aynı tanım, desteklenen herhangi bir sistemde aynı ortamı oluşturur
- Birleştirilebilir: Proje, ekip ve pipeline bazlı ortamlar katmanlandırılabilir
Hedef kullanıcılar ve kullanım ortamı
- Platform·DevX ekipleri, kurum genelindeki toolchain’i standartlaştırabilir ve Nix öğrenmeyi zorunlu kılmadan temel ortamları genişletebilir
- Security·AppSec ekipleri, SBOM, hızlı CVE müdahalesi, bağımlılık kaynağı ve yeniden üretilebilir derlemelerle ilgilenebilir
- Geliştiriciler, macOS, Linux ve Windows WSL2 üzerinde proje bazlı yeniden üretilebilir ortamlar kullanabilir; konteyner veya VM’den çok sanal ortama daha yakın bir şekilde çalışır
- AI kodlama ajanları, üretilen kodu her seferinde aynı şekilde derleyip çalıştırabilecek deterministik bir ortam elde eder
- Hedef örnekler Claude Code, Cursor, Copilot ve Codex’tir
Yeniden üretilebilirlik ve tedarik zinciri güvenliği
- Flox ortamları bildirimsel manifest ile tanımlanır ve kriptografik olarak sabitlenmiş içerik hash girdilerine kilitlenir
- Aynı lockfile, desteklenen her sistemde aynı paketlere çözümlendiğinden makineler arasında ortam aynı kalır
- Tek bir ortam tanımı geliştirici dizüstü bilgisayarında, AI ajanı sandbox’ında, CI’da ve prodüksiyonda kullanılabilir
- Nixpkgs’deki 120.000’den fazla paket kullanılabilir
- Kendi yazılımınızı kaynaktan derleyerek yeniden üretilebilir paketlere dönüştürebilir ve tüm ekibin kullanması için yayımlayabilirsiniz
- Yeniden üretilebilirlik sayesinde SBOM oluşturma, yazılım bileşimi analizi (SCA), otomatik güvenlik açığı·CVE yamalama, bağımlılık kaynağı doğrulama ve denetlenebilir derlemeleri yönetmeyi kolaylaştırır
Kurulum ve temel iş akışı
- Flox CLI, macOS, Linux ve Windows WSL2’ye yerel şekilde kurulur
- Temel kullanım akışı, proje içinde bir ortam oluşturmak, gerekli paketleri kurmak ve ardından ortamı etkinleştirmek şeklindedir
flox init: projede ortam oluştururflox install python3 nodejs: ortama paket kurarflox activate: ortama girer
- README örneğinde, etkin ortam içinde
python3 --versionkomutuPython 3.13.13,node --versionkomutu isev24.15.0olarak çalışır - Ortamdan çıkıldığında kurulu araçlar kaybolur; bu da projeler arası çakışmaları önler ve sistemi temiz tutar
Başlıca özellikler
- Create:
flox initile kodun yanında bildirimsel bir ortam oluşturabilir ve otomatik etkinleştirebilirsiniz - Search:
flox searchile Nixpkgs’deki 120.000’den fazla paketi bulabilirsiniz - Share:
flox push/flox pullile FloxHub’daki tek bir referans ortamı ekip üyeleri aynı şekilde alabilir - Containerize:
flox containerizeile Dockerfile olmadan Flox ortamını OCI imajına dönüştürebilirsiniz - Build & publish:
flox build/flox publishile kendi yazılımınızı yeniden üretilebilir paket olarak derleyip ekibe yayımlayabilirsiniz - Services:
flox services startile veritabanlarını, kuyrukları ve arka plan süreçlerini ortamın parçası olarak çalıştırabilirsiniz; etkinleştirme sırasında başlar ve çıkışta durur - Configure:
manifest.tomliçinde ortam değişkenlerini, shell hook’larını ve etkinleştirme betiklerini bildirimsel olarak tanımlar - AI-ready: flox-agentic aracılığıyla AI kodlama ajanlarının her çalıştırmada aynı bağımlılıklarla derleme ve çalıştırma yapmasını destekler
Docker ve Nix kullanıcıları için konumu
- Flox bir konteyner teknolojisi değildir ve Docker’ın yerine geçen bir araç değildir
- Docker’da paketleme ile konteyner izolasyonu çoğu zaman iç içe geçer; Flox ise yazılım paketleme ile seçilen izolasyon yönteminin ayrılması gerektiğini savunur
- Flox ortamları bare metal, VM ve konteyner üzerinde aynı şekilde çalışır
flox containerize, yazılım ortamını içeren OCI imajları oluşturur ve Docker, Kubernetes ile diğer konteyner runtime’larıyla birlikte kullanılabilir- Nix kullanıcıları için Flox bir alternatif değil, ek bir araçtır
- İş birliği ortamı ve paket paylaşımı için merkezi servis FloxHub sunar
- Etkinleştirme hook’larını, servisleri ve shell profillerini tek bir bildirimsel TOML dosyasında birleştirir
Kaynak ve destek kaynakları
- Flox, D.E. Shaw group’un büyük ölçekli kurumsal Nix dağıtımından doğmuştur ve büyük mühendislik organizasyonlarında Nix’i erişilebilir kılmak için kullanılmıştır
- İlgili kaynaklar
- Documentation: öğreticiler, referanslar, kılavuzlar
- FloxHub: ortam keşfi ve paylaşımı
- Discourse: sorular, tartışmalar, duyurular
- Blog: derinlemesine yazılar ve iş akışları
- VS Code extension: editörde Flox ortamlarını yönetme
- Güvenlikle ilgili başvurular
security@flox.devadresinden alınır - Flox CLI lisansı GPLv2’dir
1 yorum
Hacker News yorumları
Ron, lansman için tebrikler. Merak ettiğim şey gelir modelinin ne olduğu
Bir CEO, şirket ve çalışanlar var; Crunchbase’e bakınca 24 milyon dolar yatırım almış gibi görünüyor, ama açılış sayfasında ya da dokümantasyonda fiyat bilgisi bulamıyorum
GitHub profiliyle FloxHub’a giriş yapsam da ödeme seçeneği görünmüyor; planı merak ediyorum
Bugün duyurduğumuz açık kaynak istemci ve ortam paylaşımı için FloxHub hizmeti kalıcı olarak ücretsiz sunulacak
Daha sonra temel Flox Catalog’un üzerine eklenen daha güçlü bir özel yazılım kataloğu sunmak istiyoruz
Kendi çıktılarınızı dağıtmanız ya da Flox içinde değiştirilmiş açık kaynak paket sürümlerine ihtiyaç duymanız halinde, her zaman ücretsiz olan Flox Catalog’u tamamlayacak kendi kataloğunuzu kolayca oluşturabilmenizi planlıyoruz
Uzun vadede, şirketlerin geniş ve parçalı yazılım tedarik zincirlerini daha iyi yönetmesine yardımcı olacak abonelik ve hizmet biçiminde kurumsal çözümler satmak istiyoruz; şirkete özel araç geliştirme maliyetini şirketlerin birlikte üstlenmesini makul görüyoruz
README’deki “Nix’i yeni kullanıcılar için daha kolay hale getirir” tarzı ifadeleri ya da benzerlerini her gördüğümde takılıyorum
Kendimi oldukça yetkin sayarım ama Nix kullanırken bir kez bile “bu kolaydı” diye hissetmedim
Nix’in kavramlarını gerçekten seviyorum ama kullanıcı deneyimi berbat. Bu araç bunu çözüyor olabilir, fakat o noktaya gelene kadar neredeyse hiç dokümantasyon olmadan ve çoktan terk edilmiş yöntemler arasında gezinerek ayarlarla durmadan uğraşmak gerekiyor; bu da çok bunaltıcı
Her hâlükârda Nix’le ilgili bir şey gördüğümde “bunun kolaylaşacağı günü bekliyorum” diye düşünüyorum
.nixya da flakes’e alışamadımTemel kavramlar sürekli aklımdan çıkıyordu; her yeni bir şey yapılandırdığımda tekrar bakmam gerekiyordu ve sonunda pes ettim
Sorun ayıklamak da zor; neyin yanlış olduğunu anlamak için çok belirli komutları ve cehennem gibi bir dosya sistemini kurcalamak gerekiyor
Kavramı seviyorum ama pratikte çok fazla engel çıkardığını hissediyorum
Haskell geçmişim olduğu için daha tanıdık geliyor, ama sözdiziminin kendisi de yeni kullanıcılar için sezgisel değil
Rust öğrenmeye benziyor; bu yönüyle eğlenceli de
“Öğrenme eğrisi olmadan Nix’in gücünü sunar” türü ürünlerin temel sorunu, arkada hâlâ Nix ve
/nix/storeolması; Nix de bunu bilerek otomatik temizlemiyorKullanıcı Nix’i gizleyen bir aracı denedikçe eninde sonunda diski dolar; depolama alanını nasıl azaltacağını bilmediği için buna kullanıcı dostu demek zor
Kullanıcının Nix kurduğunu bilip öğrenme sürecinden geçmesi farklı; bu sayede
/nix/storeın ne olduğu ve nasıl yönetilmesi gerektiği hakkında zihinsel bir model kurabilirBu tür alt katman karmaşıklığını nasıl ele almayı planladığınızı merak ediyorum
Flox’un ortamları basit sembolik bağlantılar değil; bildirime dayalı bir biçime, içeride de flakes’e sahip, bu yüzden kaldırılabilir ve gerekirse yeniden üretilebilir
Bu nedenle çöp toplama,
nix-env/nix profilekullanmaya kıyasla daha az yıkıcı olur ve eski nesiller daha agresif biçimde temizlenebilirStrateji, temizlenen şeyi geri getirebilecek bildirime dayalı ve yeniden üretilebilir bir yöntemi her zaman garanti ettikten sonra; boş alan, yaş, yakın zamanda kullanılmamış olma ve düşük kullanım sıklığı gibi sezgisel ölçütlerle diskin dolmasını önlemek
Tersine, Nix’te bu sorunu hiç yaşamadım. Çöp temizleme yöntemini açıkça anlatıyor ve geride ne kaldığını, neden kaldığını da kolayca inceleyebiliyorsunuz
Varsayılan olarak etkin olmamasının nedeni, diğer çöp toplayıcılar gibi engelleyici olabilmesi ve herkese uyan tek bir politikanın olmaması
Sonuçta GC kökü çok fazlaysa bir karar vermek gerekiyor
Bilgisayar kullanırken arka planda akıl almaz derecede karmaşık binlerce şey oluyor; Nix’i soyutlamanın neden özel muamele gördüğünü pek anlamıyorum
Yayın için tebrikler. Nix’i gerçekten seviyorum ama onboarding deneyiminin en iyi ihtimalle kötü, en kötü ihtimalle berbat olduğunu da kabul ediyorum
Bu yüzden onu daha erişilebilir kılmaya yönelik girişimleri memnuniyetle karşılıyorum. Imperative CLI, birçok kişinin beklediği ve rahat hissettiği kullanım biçimine çok daha yakın; bu yüzden iyi bir yön olduğunu düşünüyorum
Başka yerlerdeki ortamları kullanma sürecini basitleştirme fikrine de büyük ölçüde katılıyorum
Ancak önemli göründüğü hâlde göremediğim şey IDE entegrasyonu. IDE’yi ortamın içinden komut satırıyla başlatmak birçok iş arkadaşım için sezgisel değil ve bunu birkaç kez gerçek sorunun temel nedeni olarak teşhis ettim
Gerektiğinde “gerçek Nix”e inme hikâyesinin nasıl olduğunu merak ediyorum. Örneğin Rust cross-compile toolchain’i ayarlayan biraz daha karmaşık bir ortamda uçurumdan düşer miyiz diye endişeleniyorum
Rust geliştirme örneği olarak, Rust-Analyzer’ın düzgün çalışması için bir flake’e uzun bir
shellHookkoymam gerekmişti; Flox’ta böyle bir ayarın nasıl yapılabileceğini merak ediyorumBu tür şeyleri soyutlamaya mı çalışıyorsunuz, yoksa öyle değilse Nix bilmeyen bir kullanıcı bunu nasıl keşfedebilir, onu da merak ediyorum
Kesinlikle imkânsız demek istemiyorum; gerçekten başarılı olmasını istiyorum ama yöntemi henüz net göremiyorum
Şu anki düşüncemiz, belirli alanlarda flake referanslarına izin vermek veya Nix tarzı bir giriş noktası sunmak
Henüz yayımlanmış ya da belgelenmiş değil; bu yüzden beklemenizi rica ederim
Karmaşıklığı gizlemek ile yetenekleri açığa çıkarmak arasında gerçekten çok ince bir çizgi olduğu konusunda tamamen katılıyorum
Sıradan
nix-shellveyanix developyerine Flox kullanmanın avantajının ne olduğunu merak ediyorumNix expression dilini öğrenmeden veya Nix’in iç yapısını anlamadan başarılı olabilmenizi istiyoruz
Ayrıca bir ölçüde yönlendirme ve cilalama ekledik. Örneğin imperative/declarative karma bir arayüz var;
flox install && flox listçalıştırdığınızda değişiklikler TOML’a yansıyor. Buna karşılıknix developile Nix expression’ını düzenlemeniz gerekiyornix developbash shell’e girer, amaflox activatebash veya zsh shell’e girebilir; fish desteği de eklemeyi planlıyoruzOrtamları Git ile yönetmeyi Nix araçları gibi destekliyoruz; ayrıca
flox push/flox pull/flox activate -rgibi o araçlarla mümkün olmayan ortam paylaşımı biçimleri de ekledikBir hesap oluşturursanız https://hub.flox.dev/mkenigs/default adresinde benim ortamımdaki paketleri görebilir; CLI varsa
flox list -r mkenigs/defaultile kontrol edipflox activate -r mkenigs/defaultile kullanabilirsinizNix expression dilini bilmeyen birine
flake.nixlink’i vermekten çok daha kolay sindirilebilir olduğunu düşünüyorumFlox veya devenv gibi araçların ömrünün sona ermesi, nixpkgs’i düzgün takip edememesi ya da yazılımın çürümesinin birçok yolundan birine maruz kalması gayet mümkün
Buna karşılık
nix develop, Nix Flakes var olduğu sürece kalacaktır ve sonraki yönteme geçiş için migration yolu sunma motivasyonu da olacaktırDaha da önemlisi, tüm soyutlamalar sızıntı yapar. Flox CLI daha temiz görünebilir ama sonunda onu etkili kullanmak için Nix öğrenmeniz gerekecek
Gerekenden iki kat fazlasını öğrenmeye ne gerek var diye düşünüyorum
Mevcut Devbox projesiyle (https://www.jetpack.io/devbox) nasıl karşılaştırıldığını merak ediyorum
Flox’ta isteğe bağlı bir bulut çözümü var mı, belirli bir Nix paketi sürümü kurulabiliyor mu, işletim sistemine özgü bağımlılıklar nasıl ele alınıyor, bunları da öğrenmek isterim
Bu tür araçları 5 yıldır kullanıyorum; Flox’un zaten var olanlara kıyasla ne yeni getirdiğini merak ediyorum
Bunu neden normal Nix yerine kullanmam gerektiğini gerçekten anlamıyorum; açıklayabilir misiniz
Bu bana 100 kat daha basit görünüyor
Ancak Nix, ilk ilkelerden başlayarak çok genel amaçlı olacak şekilde inşa edildiği için öğrenme eğrisi epey dik
Flox, problem alanını daraltıp özelleşmiş soyutlamalar ve arayüzler sunarak, ilk günden Nix uzmanı olmanız gerekmeksizin Nix’in gücünden yararlanmanızı sağlayacak şekilde basitleştirmeye çalışan bir araç
Yeniden üretilebilir geliştirme ortamlarıyla çok ilgileniyorum ve iş yerinde de birkaç yıldır geliştirme konteynerlerini gayet iyi kullanıyorum
Yaklaşık 1 yıl önce Nix’i duydum; başta vaatleri harika olduğu için çok heyecanlandım ama onboarding süreci benim için berbat geçti
Oluşturmak istediğim geliştirme ortamı net, ama yaklaşımda sürekli bir şeyi kaçırıyormuşum gibi hissediyorum
Tüm deneyimi iyileştirmeye çalışan yeni bir araç çıktığı için sevindim; denemeye devam edersem bir gün kafama oturmasını umuyorum
Sizin için Nix hangi anda “tam yerine oturdu”, merak ediyorum
Microservices videosunu hiç izlediniz mi? https://www.youtube.com/watch?v=y8OnoxKotPQ
O dönemde Facebook’ta geliştirici ürünleri ekibini yönetiyordum ve yerel geliştirmeye uzaktan yetenekler enjekte eden bir proje başlatmıştım
Binlerce geliştirici cold build için 45’er dakika bekliyordu
İlk aşamalardan biri tüm yazılım geliştirme yaşam döngüsünü haritalamaktı; amaç, toolchain’in hangi kısımlarını yeniden oluşturmamız gerektiğini anlamaktı
Videonun sonlarındaki whiteboard’u görünce akla geldiği gibi, ne kadar karmaşık hâle getirdiğimizi görselleştirdiğimiz anda “bizim çalışma şeklimiz bu olamaz” düşüncesine kapılıyorsunuz
Nix’i en son kullandığımda flakes konusunda epey kafa karışıklığı vardı
Bazı öğreticiler kullanın diyordu, başka yerler ise hâlâ geliştirme aşamasında olduğunu söylüyordu; durumun düzelip düzelmediğini merak ediyorum
flakes sorununun iki noktadan kaynaklandığını düşünüyorum
Birincisi, neredeyse 5 yıldır üzerinde experimental etiketi olması; bu yeni kullanıcıların kafasını karıştırıyor ama gerçekte neredeyse her yerde yaygın biçimde kullanılıyor
Diğeri ise https://determinate.systems/ ile eski Nix kullanıcıları/geliştiricileri arasında havanın kötü görünmesi. Determinate Systems’ın Nix’i kendi çıkarına kullanıp katkıyı geri vermediği yönünde eleştirildiği anlaşılıyor
Benim anladığım kadarıyla flakes’i Determinate Systems getirdi ve bu yüzden bazıları direniyor gibi
Sonuç olarak neredeyse herkes flakes’i benimsedi; kullanmayan rehberler büyük olasılıkla eski olabilir
İlgili bağlantı: https://discourse.nixos.org/t/introducing-flakehub/32044
“experimental” etiketi, olgunluk ya da hatalardan çok API kararlılığı ile ilgili bir anlama daha yakın
Belirli durumlarda performans sorunları olabilir ama geçici çözümler var ve kalıcı bir çözüm üzerinde de çalışılıyor
Yine de evde ve işte flakes’i yoğun şekilde kullanıyorum
Dün gece macOS’ta Flox’u denedim; Nix-Darwin’in
/run/current-system/sw/biniçinde yönettiği Nix’ten ayrı olarak varsayılan profile Nix kurduğunu ve bu kopyayı/usr/local/biniçine sembolik bağladığını gördümMevcut Nix kullanıcıları, yani NixOS kullanıcıları ya da Nix’i zaten kurmuş olup Flox’un desteklediği dağıtım paket biçimi bulunmayan başka dağıtımlardaki kullanıcılar için de bir yönlendirme yoktu
Flox’un Nix için üçüncü taraf bir profil yöneticisi olması nedeniyle kararsız Nix profile manifest biçimi gibi şeylere mi bağımlı olduğunu, yoksa aslında çeşitli Nix sürümleriyle kullanılabilir olup sadece test edilmemiş mi olduğunu merak ediyorum
Nix tabanlı Flox kurulumunu ileride desteklenecek bir özellik olarak düşünüp düşünmediklerini de bilmek isterim
Ayrıca fish desteğinin geleceği söylenmişti;
activatealt komutunun shell entegrasyonunun Flox kaynaklarında ya da yapılandırmasında gerçekte nerede olduğunu söyleyebilir misinizResmî fish desteğini beklerken fenv gibi bir şeyle geçici olarak bağlamayı denedim ama kurulu sürümü ve kaynakları tarayınca takılabilecek uygun bir yer pek göremedim
Şu anda fish kullanmanın en iyi yolunun
FLOX_SHELL=zsh flox activate -- fisholduğunu düşünüyorum. Takma adları desteklemez ama çoğunlukla çalışacaktırGerçekten kaynağı hacklemek mi istiyorsunuz, yoksa geçici bir çözüm üretmek için yapıyı mı anlamaya çalışıyorsunuz, onu da merak ediyorum
bash veya zsh olmayan shell’lerde şu civarda hata veriyor: https://github.com/flox/flox/blob/9e18a3ceaa185006bae95a4827...
Kendiniz düzeltmeyi denemek isterseniz arka planı daha ayrıntılı anlatmaktan memnuniyet duyarım