Flakes bilan tanishuv
Flakes eksperimental funksiyasi Nix uchun katta rivojlanish bo‘lib, u Nix ifodalari o‘rtasidagi bog‘liqliklarni boshqarish siyosatini taqdim etadi hamda Nix ekotizimining qayta ishlab chiqariluvchanligi, kompozitsiyaligi va foydalanish qulayligini yaxshilaydi. Flakes hali eksperimental bo‘lsa ham, Nix hamjamiyatida keng qo‘llaniladi.1
Flakes, Nix loyihasi tarixidagi eng muhim o‘zgarishlardan biri hisoblanadi.2
Oddiy qilib aytganda, agar siz JavaScript/Go/Rust/Python kabi tillarda ishlagan bo‘lsangiz, package.json
/go.mod
/Cargo.toml
/pyproject.toml
kabi fayllar bilan tanish bo‘lishingiz kerak. Ushbu dasturlash tillarida bu fayllar dasturiy paketlar o‘rtasidagi bog‘liqliklarni va loyihalarni qanday qurishni tasvirlash uchun ishlatiladi.
Xuddi shunday, ushbu dasturlash tillarining paket boshqaruvchilari package-lock.json
/go.sum
/Cargo.lock
/poetry.lock
kabi fayllardan foydalanib, bog‘liqlik versiyalarini qulflab, loyihalarning qayta ishlab chiqariluvchanligini ta'minlaydi.
Flakes ushbu paket boshqaruvchilari g‘oyalaridan ilhomlanib, Nix ekotizimining qayta ishlab chiqariluvchanligi, kompozitsiyaligi va foydalanish qulayligini oshiradi.
Flakes, Nix paketlari o‘rtasidagi bog‘liqliklarni va loyihalarni qurishni tasvirlash uchun flake.nix
faylini, bog‘liqlik versiyalarini qulflash uchun esa flake.lock
faylini taqdim etadi.
Boshqa tomondan, Flakes eksperimental funksiyasi Nixning asl dizaynini foydalanuvchi darajasida buzmagan. Flakes tomonidan taqdim etilgan ikki yangi fayl flake.nix
va flake.lock
aslida boshqa Nix konfiguratsiyalarining ustida ishlaydigan qatlamdir. Keyingi boblarda ko‘rishimiz mumkinki, Flakes asl Nix dizayniga asoslangan holda, Nix ifodalari o‘rtasidagi bog‘liqliklarni boshqarishning yangi va qulayroq usulini taqdim etadi.
Flakes haqida ehtiyotkorlik bilan
Flakesning foydalari aniq bo‘lib, butun NixOS hamjamiyati uni faol qo‘llab-quvvatlamoqda. Hozirda foydalanuvchilarning yarmidan ko‘pi Flakesdan foydalanadi3, bu esa uning eskirmasligini kafolatlaydi.
Ammo ta'kidlash kerakki, Flakes hali ham eksperimental funksiyadir. Ayrim muammolar mavjud va stabilizatsiya jarayonida buzuvchi o‘zgarishlar kiritilishi ehtimoli bor.
Umuman olganda, Flakesdan foydalanishni qat'iy tavsiya qilaman, ayniqsa ushbu kitob NixOS va Flakesga qaratilgan. Lekin kelajakdagi buzuvchi o‘zgarishlar tufayli yuzaga kelishi mumkin bo‘lgan muammolarga tayyor turish kerak.
Flakes qachon stabil bo‘ladi?
Flakes haqida ba'zi tafsilotlarni ko‘rib chiqdim:
- [RFC 0136] Flakes va yangi CLI ni bosqichma-bosqich stabilizatsiya qilish rejasi (opens in a new tab): bosqichma-bosqich stabilizatsiya rejasi qabul qilindi.
- CLI stabilizatsiya ishlari (opens in a new tab): yangi CLI stabilizatsiyasining borishini kuzatuvchi masala.
- Nega Flakes hali ham eksperimental? - NixOS Discourse (opens in a new tab): Flakes nima uchun hali ham eksperimental ekanini muhokama qiluvchi post.
Bu manbalarga asoslanib, Flakes taxminan ikki yil ichida stabil bo‘lishi mumkin yoki bo‘lmasligi mumkin, biroq ba'zi buzuvchi o‘zgarishlar bo‘lishi ehtimoli yuqori.
Yangi CLI va klassik CLI
Nix 2020-yilda ikkita eksperimental funksiyani, ya'ni nix-command
va flakes
ni taqdim etdi. Ushbu funksiyalar yangi buyruq qatori interfeysi (New CLI), standart Nix paket strukturasini (Flakes funksiyasi), va flake.lock
kabi versiya qulflash fayllarini o‘z ichiga oladi. Ushbu funksiyalar 2024-yil 1-fevral holatiga ko‘ra eksperimental bo‘lsa-da, ular juda keng qo‘llaniladi.
Ushbu kitobda yangi CLI va eski CLI o‘rtasidagi farqlarni tanishtirish kerak bo‘ladi.
Quyida yangi CLI va Flakes bilan ishlaganda endi kerak bo‘lmaydigan eski Nix CLI buyruqlari keltirilgan (faqat nix-collect-garbage
dan tashqari, hozircha buyrug‘ning o‘rniga muqobil yo‘q):
nix-channel
: Flakesʼda uning vazifasi to‘liqflake.nix
dagiinputs
bilan almashtirilgan.nix-env
: Yangi CLIʼdanix profile
mavjud, lekin boshlovchilarga tavsiya etilmaydi.nix-shell
: Yangi CLIʼda unix develop
,nix shell
, vanix run
bo‘lib bo‘lingan.nix-build
: Yangi CLIʼdanix build
bilan almashtirilgan.nix-collect-garbage
: Yangi CLIʼda muqobili mavjud emas.