Flox 1.0 – ทำให้สภาพแวดล้อมการพัฒนาเป็นโค้ดด้วยโอเพนซอร์สที่ใช้ Nix
(github.com/flox)- Flox คือ แพลตฟอร์มสภาพแวดล้อมซอฟต์แวร์ สำหรับทีมวิศวกรรม ที่จัดการสภาพแวดล้อมซึ่งทำซ้ำได้เหมือนกันตั้งแต่โน้ตบุ๊กของนักพัฒนาไปจนถึง CI และโปรดักชันด้วย manifest เดียว
- แม้จะสร้างอยู่บน Nix แต่ความรู้เรื่อง Nix เป็นเพียงทางเลือก โดยใช้ manifest แบบประกาศและอินพุต content hash ที่ตรึงไว้ด้วยวิทยาการเข้ารหัสเพื่อลดปัญหา environment drift
- ทำงานได้บน macOS, Linux และ Windows WSL2 สามารถค้นหาและติดตั้ง แพ็กเกจกว่า 120,000 รายการ จาก Nixpkgs รวมถึง build และ publish ซอฟต์แวร์ของตนเองเป็นแพ็กเกจที่ทำซ้ำได้
- ใช้ลำดับงาน
flox init,flox install,flox activateเพื่อสร้างสภาพแวดล้อมแบบแยกต่อโปรเจ็กต์ เมื่อ activate แล้วเครื่องมือจะปรากฏขึ้น และเมื่อออกจากสภาพแวดล้อมก็จะหายไป ช่วยให้ระบบสะอาดอยู่เสมอ - มุ่งเน้นการจัดการวงจรชีวิตสภาพแวดล้อมในระดับองค์กร ครอบคลุมการแชร์ผ่าน FloxHub, การสร้าง OCI image, การรัน service, SBOM·การแพตช์ CVE·SCA และสภาพแวดล้อมการรันแบบกำหนดแน่นอนสำหรับ AI coding agent
ปัญหาที่ Flox ต้องการแก้
- Flox เป็นแพลตฟอร์มที่กำหนด สภาพแวดล้อมการพัฒนา ด้วยไฟล์เดียว และทำให้สามารถรันสภาพแวดล้อมเดียวกันได้บนโน้ตบุ๊กของนักพัฒนา, CI และโปรดักชัน
- หาก package manager แบบดั้งเดิมมุ่งเน้นการติดตั้งแพ็กเกจบนเครื่องเดี่ยว Flox จะจัดการ วงจรชีวิตของแพ็กเกจและสภาพแวดล้อม ทั้งระดับองค์กร
- คุณสมบัติหลักมี 3 ข้อ
- Declarative: อธิบายเครื่องมือ ตัวแปรสภาพแวดล้อม และ service ที่โปรเจ็กต์ต้องใช้ไว้ในไฟล์เดียว
- Reproducible: นิยามเดียวกันสามารถสร้างสภาพแวดล้อมเดียวกันได้บนทุกระบบที่รองรับ
- Composable: สามารถจัดชั้นสภาพแวดล้อมตามโปรเจ็กต์ ทีม หรือ pipeline ได้
ผู้ใช้เป้าหมายและสภาพแวดล้อมการใช้งาน
- ทีม Platform·DevX สามารถทำให้ toolchain ทั่วทั้งองค์กรเป็นมาตรฐาน และขยายสภาพแวดล้อมอ้างอิงได้โดยไม่ต้องบังคับให้เรียนรู้ Nix
- ทีม Security·AppSec สามารถจัดการ SBOM, การตอบสนองต่อ CVE อย่างรวดเร็ว, แหล่งที่มาของ dependency และ reproducible build ได้
- นักพัฒนา สามารถใช้สภาพแวดล้อมต่อโปรเจ็กต์ที่ทำซ้ำได้บน macOS, Linux และ Windows WSL2 โดยทำงานในลักษณะใกล้เคียง virtual environment มากกว่าคอนเทนเนอร์หรือ VM
- AI coding agent จะได้สภาพแวดล้อมแบบกำหนดแน่นอนที่สามารถ build และรันโค้ดที่สร้างขึ้นได้ในแบบเดียวกันทุกครั้ง
- ตัวอย่างเป้าหมายได้แก่ Claude Code, Cursor, Copilot และ Codex
ความสามารถในการทำซ้ำและความปลอดภัยของซัพพลายเชน
- สภาพแวดล้อม Flox ถูกกำหนดด้วย manifest แบบประกาศ และล็อกไว้กับ อินพุต content hash ที่ตรึงไว้ด้วยวิทยาการเข้ารหัส
- lockfile เดียวกันจะถูกตีความเป็นแพ็กเกจเดียวกันในทุกระบบที่รองรับ จึงทำให้สภาพแวดล้อมระหว่างเครื่องคงความเหมือนกัน
- สามารถใช้คำนิยามสภาพแวดล้อมเดียวกันบนโน้ตบุ๊กของนักพัฒนา, AI agent sandbox, CI และโปรดักชันได้
- สามารถใช้ แพ็กเกจกว่า 120,000 รายการ จาก Nixpkgs
- สามารถ build ซอฟต์แวร์ของตนเองจากซอร์สให้เป็นแพ็กเกจที่ทำซ้ำได้ และ publish ให้ทั้งทีมใช้งานร่วมกัน
- ด้วยพื้นฐานของ reproducibility จึงช่วยให้การสร้าง SBOM, software composition analysis (SCA), การแพตช์ช่องโหว่และ CVE อัตโนมัติ, การตรวจสอบแหล่งที่มาของ dependency และ build ที่ตรวจสอบย้อนหลังได้ ทำได้ง่ายขึ้น
การติดตั้งและเวิร์กโฟลว์พื้นฐาน
- Flox CLI ติดตั้งแบบเนทีฟได้บน macOS, Linux และ Windows WSL2
- ลำดับการใช้งานพื้นฐานคือสร้างสภาพแวดล้อมภายในโปรเจ็กต์ ติดตั้งแพ็กเกจที่ต้องใช้ แล้วจึง activate สภาพแวดล้อม
flox init: สร้างสภาพแวดล้อมในโปรเจ็กต์flox install python3 nodejs: ติดตั้งแพ็กเกจลงในสภาพแวดล้อมflox activate: เข้าใช้งานสภาพแวดล้อม
- ตัวอย่างใน README แสดงว่าในสภาพแวดล้อมที่ activate แล้ว
python3 --versionทำงานเป็นPython 3.13.13และnode --versionเป็นv24.15.0 - เมื่อออกจากสภาพแวดล้อม เครื่องมือที่ติดตั้งจะหายไป ช่วยป้องกันการชนกันระหว่างโปรเจ็กต์และทำให้ระบบสะอาด
ฟีเจอร์หลัก
- Create: ใช้
flox initเพื่อสร้างสภาพแวดล้อมแบบประกาศไว้ข้างโค้ด และสามารถ activate อัตโนมัติได้ - Search: ใช้
flox searchเพื่อค้นหาแพ็กเกจกว่า 120,000 รายการใน Nixpkgs - Share: ใช้
flox push/flox pullเพื่อให้สมาชิกทีมดึงสภาพแวดล้อมมาตรฐานเดียวกันจาก FloxHub - Containerize: ใช้
flox containerizeเพื่อสร้าง OCI image จากสภาพแวดล้อม Flox โดยไม่ต้องมี Dockerfile - Build & publish: ใช้
flox build/flox publishเพื่อ build ซอฟต์แวร์ของตนเองเป็นแพ็กเกจที่ทำซ้ำได้ และ publish ให้ทีมใช้งาน - Services: ใช้
flox services startเพื่อรันฐานข้อมูล คิว และโปรเซสเบื้องหลังเป็นส่วนหนึ่งของสภาพแวดล้อม โดยจะเริ่มเมื่อ activate และหยุดเมื่อออกจากสภาพแวดล้อม - Configure: กำหนดตัวแปรสภาพแวดล้อม shell hook และ activation script แบบ declarative ใน
manifest.toml - AI-ready: ผ่าน flox-agentic เพื่อรองรับให้ AI coding agent build และรันด้วย dependency เดียวกันในทุกครั้งที่รัน
ตำแหน่งของ Flox สำหรับผู้ใช้ Docker และ Nix
- Flox ไม่ใช่เทคโนโลยีคอนเทนเนอร์ และไม่ใช่ตัวแทนของ Docker
- ใน Docker มักมีกรณีที่การแพ็กเกจซอฟต์แวร์และการแยกคอนเทนเนอร์ถูกปะปนกัน แต่ Flox มีจุดยืนว่าควรแยก การแพ็กเกจซอฟต์แวร์ ออกจากวิธีการแยกที่เลือกใช้
- สภาพแวดล้อม Flox ทำงานได้ในแบบเดียวกันบน bare metal, VM และคอนเทนเนอร์
flox containerizeจะสร้าง OCI image ที่มีสภาพแวดล้อมซอฟต์แวร์รวมอยู่ และสามารถใช้ร่วมกับ Docker, Kubernetes และคอนเทนเนอร์รันไทม์อื่น ๆ ได้- สำหรับผู้ใช้ Nix, Flox ไม่ใช่ตัวแทนทดแทน แต่เป็นเครื่องมือเสริม
- มี FloxHub เป็นบริการศูนย์กลางสำหรับสภาพแวดล้อมการทำงานร่วมกันและการแชร์แพ็กเกจ
- รวม activation hook, service และ shell profile ไว้ในไฟล์ TOML แบบประกาศเพียงไฟล์เดียว
ที่มาและแหล่งข้อมูลสนับสนุน
- Flox เริ่มต้นจากการ deploy Nix ระดับองค์กรขนาดใหญ่ของ D.E. Shaw group และถูกใช้เพื่อทำให้ Nix เข้าถึงได้ง่ายขึ้นในองค์กรวิศวกรรมขนาดใหญ่
- แหล่งข้อมูลที่เกี่ยวข้อง
- Documentation: บทช่วยสอน เอกสารอ้างอิง และคู่มือ
- FloxHub: สำรวจและแชร์สภาพแวดล้อม
- Discourse: คำถาม การสนทนา และประกาศ
- Blog: บทความเชิงลึกและเวิร์กโฟลว์
- VS Code extension: จัดการสภาพแวดล้อม Flox จากในเอดิเตอร์
- สอบถามเรื่องความปลอดภัยได้ที่
security@flox.dev - ไลเซนส์ของ Flox CLI คือ GPLv2
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
Ron ยินดีด้วยกับการเปิดตัว สิ่งที่สงสัยคือ โมเดลรายได้ จะเป็นอย่างไร
มีทั้ง CEO บริษัท และพนักงาน และดูจาก Crunchbase เหมือนว่าจะได้รับ เงินลงทุน 24 ล้านดอลลาร์ แต่กลับหาข้อมูลราคาไม่เจอทั้งในหน้าแลนดิ้งเพจหรือเอกสาร
แม้จะล็อกอิน FloxHub ด้วยโปรไฟล์ GitHub ก็ยังไม่เห็นตัวเลือกการชำระเงิน เลยอยากรู้ว่าแผนคืออะไร
ไคลเอนต์โอเพนซอร์สที่เปิดตัววันนี้และบริการ FloxHub สำหรับแชร์ environment จะให้ ฟรีถาวร
ต่อไปเราอยากนำเสนอ private software catalog ที่ทรงพลังยิ่งขึ้นซึ่งวางอยู่บน Flox Catalog พื้นฐาน
หากคุณต้องการแจกจ่ายผลลัพธ์ที่สร้างขึ้นเอง หรือจำเป็นต้องใช้เวอร์ชันแพ็กเกจโอเพนซอร์สที่ถูกแก้ไขภายใน Flox เราวางแผนจะทำให้สร้างแคตตาล็อกของตนเองได้ง่าย เพื่อเสริม Flox Catalog ที่ใช้ฟรีตลอดไป
ในระยะยาว เราตั้งใจจะขายโซลูชันสำหรับองค์กรในรูปแบบ subscription และบริการ เพื่อช่วยให้องค์กรจัดการซัพพลายเชนซอฟต์แวร์ที่กว้างและกระจัดกระจายได้ดีขึ้น และมองว่าการให้องค์กรร่วมออกค่าใช้จ่ายในการพัฒนาเครื่องมือเฉพาะทางนั้นสมเหตุสมผล
ทุกครั้งที่เห็นข้อความทำนองว่า “ทำให้ Nix ง่ายขึ้นสำหรับผู้ใช้ใหม่” ใน README หรือคำพูดคล้ายกันก็สะดุดใจเสมอ
ผมคิดว่าตัวเองก็พอมีความสามารถ แต่ไม่เคยมีสักครั้งที่ใช้ Nix แล้วรู้สึกว่า “นี่มันง่าย”
ผมชอบแนวคิดของ Nix มาก แต่ ประสบการณ์ผู้ใช้ แย่มาก เครื่องมือนี้อาจแก้ปัญหานั้นได้ก็จริง แต่กว่าจะไปถึงจุดนั้นต้องคลำทางผ่านเอกสารที่แทบไม่มี และวิธีการที่ถูกทิ้งไปแล้ว พร้อมปรับแต่ง config ไม่รู้จบ จนชวนให้หงุดหงิด
ยังไงก็ตาม ทุกครั้งที่เห็นอะไรเกี่ยวกับ Nix ก็ทำให้นึกว่า “รอวันที่สิ่งนี้จะง่ายขึ้นอยู่”
.nixหรือ flakesแนวคิดพื้นฐานหลุดออกจากหัวตลอด เวลาเซ็ตอะไรใหม่ก็ต้องกลับไปค้นใหม่ สุดท้ายก็เหนื่อย
การดีบักปัญหาก็ยาก ต้องไปคุ้ยคำสั่งเฉพาะทางมาก ๆ กับระบบไฟล์จากนรกเพื่อหาว่าอะไรผิด
แนวคิดดี แต่พอใช้งานจริงกลับรู้สึกว่ามันขวางทางมากเกินไป
ผมมีพื้นฐาน Haskell เลยอาจรู้สึกคุ้นมือมากกว่า แต่ ตัวไวยากรณ์เองก็ไม่ได้เข้าใจง่ายสำหรับผู้ใช้ใหม่
คล้ายตอนเรียน Rust เลย เลยก็สนุกดีเหมือนกัน
ปัญหาแกนหลักของผลิตภัณฑ์แนว “ให้พลังของ Nix โดยไม่ต้องมีเส้นโค้งการเรียนรู้” คือด้านหลังมันก็ยังเป็น Nix กับ
/nix/storeอยู่ดี และ Nix ก็จงใจไม่ทำความสะอาดเรื่องนี้ให้อัตโนมัติพอผู้ใช้ลองใช้เครื่องมือที่ซ่อน Nix ไว้ สุดท้ายดิสก์ก็เต็ม แต่ไม่รู้จะลดการใช้พื้นที่อย่างไร แบบนี้คงเรียกว่าเป็นมิตรกับผู้ใช้ได้ยาก
ถ้าผู้ใช้รู้ตัวว่ากำลังติดตั้ง Nix และผ่านกระบวนการเรียนรู้ ก็จะสร้าง mental model ได้ว่า
/nix/storeคืออะไรและต้องดูแลอย่างไร ซึ่งต่างกันเลยสงสัยว่ามีแผนจะจัดการกับ ความซับซ้อนระดับล่าง นี้อย่างไร
environment ของ Flox ไม่ได้เป็นแค่ symbolic link แต่เป็นรูปแบบเชิงประกาศ และภายในมี flakes ด้วย จึงลบออกได้และถ้าจำเป็นก็สร้างกลับมาใหม่ได้
เพราะแบบนั้น การเก็บขยะจึงทำลายน้อยกว่าตอนใช้
nix-env/nix profileและสามารถลบ generation เก่าได้แบบเชิงรุกมากกว่ากลยุทธ์คือรับประกันให้ได้เสมอว่ามีวิธีแบบเชิงประกาศและทำซ้ำได้สำหรับกู้คืนสิ่งที่ลบไป แล้วค่อยใช้ heuristic อย่างพื้นที่ว่าง อายุ การไม่ได้ใช้งานล่าสุด หรือความถี่การใช้งานต่ำ เพื่อหลีกเลี่ยงไม่ให้ดิสก์เต็ม
ในทางกลับกัน ผมไม่เคยเจอปัญหานี้กับ Nix มันบอกวิธีล้างขยะชัดเจน และก็ตรวจสอบได้ง่ายว่าอะไรยังค้างอยู่และเพราะอะไร
ที่ไม่ได้เปิดใช้เป็นค่าเริ่มต้นก็เพราะเหมือน garbage collector แบบอื่น ๆ มันอาจรบกวนได้ และไม่มีนโยบายแบบเดียวที่เหมาะกับทุกคน
สุดท้ายถ้ามี GC roots มากเกินไป ก็ต้องตัดสินใจบางอย่างอยู่ดี
ทุกครั้งที่เราใช้คอมพิวเตอร์ เบื้องหลังก็มีเรื่องซับซ้อนแบบไม่น่าเชื่อเกิดขึ้นเป็นพันอย่างอยู่แล้ว ผมไม่ค่อยเข้าใจว่าทำไมการทำ abstraction ให้กับ Nix ถึงถูกมองว่าเป็นกรณีพิเศษ
ขอแสดงความยินดีกับการเปิดตัว ฉันชอบ Nix มากจริง ๆ แต่ก็ยอมรับว่า ประสบการณ์การเริ่มต้นใช้งาน นั้น ต่อให้มองในแง่ดีก็ยังแย่ และในแง่ร้ายที่สุดก็ถึงขั้นน่าหงุดหงิดมาก
เพราะอย่างนั้น ความพยายามที่จะทำให้มันเข้าถึงง่ายขึ้นจึงเป็นสิ่งที่น่ายินดี
CLI แบบ imperative ก็ใกล้เคียงกับวิธีที่หลายคนคาดหวังและรู้สึกคุ้นเคยมากกว่า จึงคิดว่าเป็นทิศทางที่ดี
และก็เห็นด้วยมากกับการทำให้กระบวนการใช้สภาพแวดล้อมของคนอื่นง่ายขึ้น
แต่สิ่งสำคัญที่ดูเหมือนขาดหายไปคือ การผสานรวมกับ IDE การสตาร์ต IDE จากบรรทัดคำสั่งภายในสภาพแวดล้อมนั้นไม่ใช่เรื่องที่เข้าใจได้ตรงไปตรงมาสำหรับเพื่อนร่วมงานหลายคน และฉันเองก็เคยวินิจฉัยว่านี่เป็นต้นตอของปัญหาจริงมาแล้วหลายครั้ง
ฉันสงสัยว่าถ้าจำเป็นต้องลงไปใช้ “Nix ของจริง” จะเป็นอย่างไร ตัวอย่างเช่น ในสภาพแวดล้อมที่ซับซ้อนขึ้นอีกหน่อยอย่างการตั้งค่า toolchain สำหรับ Rust cross-compilation ก็กลัวว่าจะเจอทางตัน
จากตัวอย่างการพัฒนา Rust ฉันเคยต้องใส่
shellHookยาว ๆ ไว้ใน flake เพื่อให้ Rust-Analyzer ทำงานได้ถูกต้อง ก็เลยสงสัยว่าใน Flox จะทำการตั้งค่าแบบนี้ได้อย่างไรไม่แน่ใจว่าตั้งใจจะ abstract เรื่องพวกนี้ออกไปเลยหรือไม่ และถ้าไม่ใช่ ผู้ใช้ที่ไม่รู้จัก Nix จะหาคำตอบได้อย่างไร
ไม่ได้จะบอกว่าเป็นไปไม่ได้เด็ดขาดนะ แค่อยากให้มันไปได้สวยจริง ๆ แต่ตอนนี้ยังมองไม่ค่อยออกว่าจะทำอย่างไร
ตอนนี้แนวคิดคืออาจอนุญาตให้มีการอ้างอิง flake ในบางฟิลด์ หรือมีจุดเริ่มต้นแบบสไตล์ Nix
ตอนนี้ยังไม่ได้เปิดเผยหรือทำเอกสารไว้ ดังนั้นขอให้รอติดตามอีกหน่อย
และเห็นด้วยเต็มที่เลยว่ามีเส้นบางมากจริง ๆ ระหว่างการซ่อนความซับซ้อนกับการเปิดเผยความสามารถ
ฉันสงสัยว่าข้อดีของการใช้ Flox แทน
nix-shellหรือnix developแบบปกติคืออะไรเราอยากให้คนใช้งานได้สำเร็จโดยไม่ต้องเรียนรู้ภาษา expression ของ Nix หรือเข้าใจโครงสร้างภายในของ Nix
นอกจากนี้ยังเพิ่มแนวทางและการขัดเกลาเข้าไปพอสมควร ตัวอย่างเช่น เรามีอินเทอร์เฟซแบบผสม imperative/declarative ดังนั้นถ้ารัน
flox install && flox listการเปลี่ยนแปลงจะถูกสะท้อนลงใน TOML ในขณะที่nix developคุณต้องไปแก้ไข Nix expression เองnix developจะพาเข้า bash shell แต่flox activateสามารถเข้าได้ทั้ง bash หรือ zsh และเราก็มีแผนจะเพิ่มการรองรับ fishเรารองรับการจัดการสภาพแวดล้อมด้วย Git แบบเดียวกับเครื่องมือของ Nix และยังเพิ่มการแชร์สภาพแวดล้อมในแบบที่เครื่องมือเหล่านั้นทำไม่ได้ เช่น
flox push/flox pull/flox activate -rถ้าคุณสร้างบัญชี คุณจะดูแพ็กเกจในสภาพแวดล้อมของฉันได้ที่ https://hub.flox.dev/mkenigs/default และถ้ามี CLI ก็ตรวจสอบได้ด้วย
flox list -r mkenigs/defaultจากนั้นใช้งานได้ด้วยflox activate -r mkenigs/defaultสำหรับคนที่ไม่รู้ภาษา expression ของ Nix ฉันคิดว่านี่เข้าใจได้ง่ายกว่าการส่งลิงก์
flake.nixให้มากมีความเป็นไปได้มากพอที่เครื่องมืออย่าง Flox หรือ devenv จะหมดอายุการใช้งาน หรือไล่ตาม nixpkgs ไม่ทัน หรือเจอรูปแบบใดรูปแบบหนึ่งของ software rot
ขณะที่
nix developจะยังอยู่ตราบเท่าที่ Nix Flakes ยังอยู่ และก็มีแรงจูงใจที่จะจัดหาเส้นทาง migration ไปสู่วิธีถัดไปที่สำคัญกว่านั้นคือ abstraction ทุกอย่างย่อมมีจุดรั่ว ถึงแม้ Flox CLI จะดูสะอาดกว่า แต่สุดท้ายถ้าอยากใช้อย่างมีประสิทธิภาพก็คงต้องเรียนรู้ Nix อยู่ดี
ก็เลยไม่แน่ใจว่าจะมีเหตุผลอะไรให้ต้องเรียนรู้มากกว่าสิ่งที่จำเป็นเป็นสองเท่า
ฉันสงสัยว่ามันเทียบกับโปรเจกต์ Devbox เดิม (https://www.jetpack.io/devbox) อย่างไร
Flox มี โซลูชันคลาวด์ แบบเลือกใช้ด้วยไหม ติดตั้งแพ็กเกจ Nix เวอร์ชันเฉพาะได้หรือเปล่า และจัดการ dependency แยกตามระบบปฏิบัติการอย่างไร
ฉันใช้เครื่องมือพวกนี้มา 5 ปีแล้ว ก็เลยอยากรู้ว่า Flox นำอะไรใหม่มาเมื่อเทียบกับของที่มีอยู่แล้ว
ฉันไม่เข้าใจจริง ๆ ว่าทำไมต้องใช้สิ่งนี้แทน Nix ปกติ ใครช่วยอธิบายได้ไหม
อันนี้สำหรับฉันดูง่ายกว่าราว 100 เท่า
แต่ Nix ถูกสร้างขึ้นจากหลักการพื้นฐานให้มีความเป็นทั่วไปสูงมากตั้งแต่ต้น จึงมี learning curve ที่ค่อนข้างชัน
Flox เป็นเครื่องมือที่พยายามทำให้ง่ายขึ้นโดยจำกัดขอบเขตของปัญหา และให้นามธรรมกับอินเทอร์เฟซที่เฉพาะทาง เพื่อให้ใช้ความสามารถของ Nix ได้โดยไม่ต้องกลายเป็นผู้เชี่ยวชาญ Nix ตั้งแต่วันแรก
ฉันสนใจ สภาพแวดล้อมการพัฒนาแบบทำซ้ำได้ มาก และที่ทำงานก็ใช้ development containers ได้ผลดีมาหลายปีแล้ว
ประมาณ 1 ปีก่อนฉันได้ยินเรื่อง Nix และตอนแรกก็ตื่นเต้นมาก เพราะคำสัญญาของมันยอดเยี่ยมจริง ๆ แต่กระบวนการเริ่มต้นใช้งานสำหรับฉันนั้นโหดร้ายมาก
ฉันรู้ชัดว่าต้องการสร้างสภาพแวดล้อมการพัฒนาแบบไหน แต่รู้สึกเหมือนพลาดอะไรบางอย่างในแนวทางการเข้าถึงมันอยู่ตลอด
ดีใจที่มีเครื่องมือใหม่ออกมาพยายามปรับปรุงประสบการณ์โดยรวม และหวังว่าถ้ายังลองต่อไปเรื่อย ๆ สักวันคงจะจับทางได้
อยากรู้ว่าสำหรับคุณ Nix มัน “คลิก” ขึ้นมาในจุดไหน
เคยดูวิดีโอ Microservices นี้ไหม https://www.youtube.com/watch?v=y8OnoxKotPQ
ตอนนั้นฉันเป็นหัวหน้าทีมผลิตภัณฑ์สำหรับนักพัฒนาที่ Facebook และเราเริ่มโปรเจกต์เพื่ออัดความสามารถแบบรีโมตเข้าไปใน local development
นักพัฒนาหลายพันคนกำลังรอ cold build กันครั้งละ 45 นาที
หนึ่งในช่วงแรก ๆ คือการวาดภาพ วงจรชีวิตการพัฒนาซอฟต์แวร์ ทั้งหมดออกมา เพื่อหาว่าเราต้องสร้างส่วนไหนของ toolchain ขึ้นใหม่บ้าง
ถ้าดูไวต์บอร์ดช่วงท้ายวิดีโอ มันเหมือนเป็นช่วงเวลาที่ได้มองเห็นภาพว่าพวกเราทำทุกอย่างให้ซับซ้อนแค่ไหน แล้วก็พาไปสู่ความคิดที่ว่า “นี่ไม่ควรเป็นวิธีที่เราทำงานกัน”
ครั้งล่าสุดที่ฉันใช้ Nix ยังมีความสับสนเรื่อง flakes อยู่มาก
บางบทสอนก็บอกให้ใช้ แต่อีกหลายแห่งก็บอกว่ายังอยู่ระหว่างพัฒนา เลยสงสัยว่าสถานการณ์ดีขึ้นหรือยัง
ปัญหาเรื่อง flakes น่าจะมาจากสองอย่าง
อย่างแรกคือมันติดป้าย experimental มานานเกือบ 5 ปี ทำให้ผู้ใช้ใหม่สับสน แต่ในความเป็นจริงกลับถูกใช้อย่างแพร่หลายแทบทุกที่
อีกอย่างคือดูเหมือนจะมีความบาดหมางกันระหว่าง https://determinate.systems/ กับผู้ใช้และนักพัฒนา Nix รุ่นเก๋า Determinate Systems ดูเหมือนจะถูกวิจารณ์ว่านำ Nix ไปใช้เพื่อผลประโยชน์ของตัวเองโดยไม่ตอบแทนกลับสู่ชุมชน
เท่าที่ฉันเข้าใจ Determinate Systems เป็นคนผลักดัน flakes เข้ามา เลยทำให้บางส่วนต่อต้าน
สรุปคือแทบทุกคนรับ flakes มาใช้แล้ว และไกด์ที่บอกว่าไม่ควรใช้นั้นก็มักจะเก่าแล้ว
ลิงก์ที่เกี่ยวข้อง: https://discourse.nixos.org/t/introducing-flakehub/32044
ป้าย “experimental” มีความหมายใกล้กับเรื่อง API stability มากกว่าความสมบูรณ์หรือบั๊ก
ในบางสถานการณ์อาจมีปัญหาด้านประสิทธิภาพอยู่บ้าง แต่ก็มีวิธีเลี่ยง และกำลังทำทางแก้ถาวรอยู่ด้วย
ถึงอย่างนั้นฉันก็ยังใช้ flakes เยอะทั้งที่บ้านและที่ทำงาน
เมื่อคืนฉันลองใช้ Flox บน macOS แล้วเห็นว่ามันติดตั้ง Nix ลงใน default profile แยกจาก Nix ที่ Nix-Darwin จัดการไว้ใน
/run/current-system/sw/binแล้วค่อยทำ symbolic link ของสำเนานั้นไปที่/usr/local/binอีกทั้งยังไม่มีคำแนะนำสำหรับผู้ใช้ Nix เดิมอยู่แล้ว เช่น ผู้ใช้ NixOS หรือผู้ใช้ดิสโทรอื่นที่ติดตั้ง Nix ไว้แล้วแต่ไม่มีรูปแบบแพ็กเกจของดิสโทรที่ Flox รองรับ
ฉันเลยสงสัยว่านี่เป็นเพราะ Flox เป็นตัวจัดการโปรไฟล์ third-party ของ Nix ที่ต้องพึ่งพาสิ่งอย่างรูปแบบ Nix profile manifest ที่ยังไม่เสถียร หรือจริง ๆ แล้วมันใช้ร่วมกับ Nix หลายเวอร์ชันได้แต่แค่ยังไม่ได้ทดสอบกันแน่
และก็อยากรู้ด้วยว่ามองการติดตั้ง Flox แบบอิง Nix ว่าเป็นฟีเจอร์ที่จะรองรับภายหลังหรือเปล่า
อีกอย่างคือเห็นบอกว่าจะมีการรองรับ fish เลยอยากรู้ว่าจริง ๆ แล้ว shell integration ของคำสั่งย่อย
activateอยู่ตรงไหนในซอร์สหรือคอนฟิกของ Floxระหว่างรอการรองรับ fish อย่างเป็นทางการ ฉันพยายามจะผูกใช้งานชั่วคราวด้วยอะไรอย่าง fenv แต่ไล่ดูทั้งตัวติดตั้งและซอร์สแล้วก็ยังไม่ค่อยเห็นจุดที่น่าจะเสียบเข้าไปได้
ตอนนี้วิธีที่ดีที่สุดในการใช้ fish น่าจะเป็น
FLOX_SHELL=zsh flox activate -- fishฉันคิดว่ายังไม่รองรับ alias แต่ส่วนใหญ่น่าจะใช้งานได้ฉันอยากรู้ด้วยว่าคุณตั้งใจจะแฮ็กซอร์สจริง ๆ หรือแค่อยากเข้าใจโครงสร้างเพื่อทำวิธีเลี่ยงชั่วคราว
ถ้าเป็นเชลล์ที่ไม่ใช่ bash หรือ zsh จะเกิดข้อผิดพลาดแถว ๆ นี้: https://github.com/flox/flox/blob/9e18a3ceaa185006bae95a4827...
ถ้าคุณอยากลองแก้เอง ฉันยินดีอธิบายบริบทเบื้องหลังเพิ่มเติม