How we accidentally built a better build system for OCaml
Bài tóm tắt Jane Street 2025 4. Điều chỉnh Độ khó: Trung bình
Jane Street · 2025 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Bối cảnh
- Khoảng 2012, không hài lòng với OMake, Jane Street tự viết build system Jenga. Họ mở mã nguồn, nhưng gần như không ai dùng: không chạy trên Windows, và dùng Jenga là phải theo cả "cách Jane Street build OCaml". Họ thậm chí rút lại khỏi open source.
- 2016: viết Jbuilder, một công cụ nhỏ đa nền tảng để người ngoài build được code của họ mà không cần Jenga. Jbuilder đọc file
jbuildvà chạy mọi lệnh biên dịch theo thứ tự topo, chạy lại hết mỗi lần, không phải build system theo nghĩa thông thường.
Thay đổi chính
- Người ngoài lại rất thích Jbuilder vì nhanh: build dự án của họ nhanh hơn OCamlbuild khoảng 5 lần, cộng với chạy đa nền tảng và dễ sửa. Cùng OCaml Labs (nay là Tarides) biến nó thành build system thật; vì trùng tên với IDE Borland JBuilder nên đổi tên thành Dune.
- Kết quả là phải bảo trì hai build system. Câu hỏi "bao giờ chuyển Jane Street sang Dune" luôn được trả lời "năm sau", vì đội build bận theo kịp codebase: 4 triệu dòng OCaml năm 2016, 65 triệu dòng OCaml cộng 5 triệu dòng Python lúc viết bài.
- Khi đội build có 5 kỹ sư toàn thời gian thì mới quyết làm. Phần việc lớn không lường trước: làm Dune scale tới repo 70 triệu dòng, chuyển các tối ưu Jenga tích luỹ một thập kỷ sang Dune, và chuyển từng tích hợp editor (Vim, Emacs, VSCode).
- Sau hơn một năm, cả codebase build bằng Dune. Hiệu năng bằng hoặc hơn Jenga ở mọi chỗ; build mà phần lớn đã có trong cache nhanh hơn 2–3 lần. Đẩy thay đổi lên upstream để không sinh ra bản fork nội bộ.
Vì sao
- Theo Jane Street, Dune là thiết kế được nghĩ lại, nhanh hơn với đa số build, nhiều người dùng hơn, API và trải nghiệm tốt hơn. Một hệ duy nhất giúp tốc độ cải tiến tăng: đội build giờ 12 người ở New York, London, Singapore. Distributed build, "build without the bytes", cache đồ thị build đều gần tầm tay hơn.
Bài học cho SWE
- Công cụ nội bộ mở ra ngoài thường thất bại khi nó kéo theo cả cách làm của công ty; một mảnh nhỏ, nhanh, dễ dùng lại có thể thắng.
- Hai hệ làm cùng việc là nợ; migration lớn chỉ xảy ra khi có đội đủ người chuyên trách.
- Hệ nội bộ lâu năm chứa nhiều tối ưu ngầm cho quy mô; phần "làm cho scale" thường lớn hơn phần chuyển cấu hình.
Liên quan
- Jane Street 2014 (Jenga thời 2014) · Jane Street 2023
- CI và build ở quy mô lớn · Quản lý fleet và migrate code hàng loạt
#build system#OMake#Jenga#Jbuilder#Dune#monorepo#open source#migration#build cache#editor integration#upstream
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (4)