Trưởng thành theo cách khó khăn: Bước ngoặt lớn của Mã nguồn mở

Mã nguồn mở (Open Source) đã có một tuổi thơ tuyệt vời. Trong suốt hai thập kỷ, nó giống như một đứa trẻ chạy chân trần, cho đi mọi thứ và tin tưởng người lạ. Nhưng kể từ năm 2020, những lỗ hổng như SolarWinds và Log4Shell cùng các quy định mới từ EU đã buộc nó phải bước vào một giai đoạn trưởng thành đầy khắc nghiệt. Bài viết phân tích về sự chuyển dịch tất yếu của Open Source sang một mô hình bền vững và có trách nhiệm hơn cho doanh nghiệp.
Sự trưởng thành của Mã nguồn mở

Mã nguồn mở (Open Source) đã có một tuổi thơ tuyệt vời.

Trong suốt hai thập kỷ, nó được sống như một đứa trẻ. Nó chạy nhảy chân trần, cho đi mọi thứ, tin tưởng người lạ và chưa bao giờ bận tâm về việc ai đang theo dõi mình. Nó điều hành một kiểu quầy bán nước chanh chấp nhận giấy nợ từ bất kỳ ai ghé qua — cứ lấy những gì bạn cần, trả lại khi nào cũng được, không cần để lại tên tuổi. Đó là một quãng thời gian bình dị. Nhưng nhìn lại, nó cũng có phần hơi hoang dã.

Sau đó, vào khoảng năm 2020, "giọng nói" của nó bắt đầu vỡ. Nó bắt đầu mọc râu. Mụn trứng cá ở khắp mọi nơi. SolarWinds, rồi Log4Shell, rồi TeamPCP và Shai-Hulud — chuỗi cung ứng thức dậy vào một buổi sáng giống như đoạn kết của Ender's Game: kịch bản mô phỏng hóa ra là thật bấy lâu nay. Đó là những trận chiến thực sự. Những hệ thống thật, tiền thật, con người thật, tất cả đều âm thầm dựa dẫm vào những dòng mã mà chúng ta vốn coi như một vòng chơi thử. Và rồi "người lớn" xuất hiện cùng các quy tắc: các sắc lệnh hành pháp, các quy định của Châu Âu, những tờ giấy phép cho một nửa số nơi mà nó muốn đến.

Những gì nó không nhận được là một quá trình trưởng thành êm đềm, chậm rãi như trong truyện cổ tích. Nó đã bị gọi nhập ngũ. Ở tuổi mười tám, trước khi kịp chuẩn bị, nó bị ném vào một cuộc chiến tổng lực trên hai mặt trận: AI cấp độ Mythos có khả năng tìm ra các Zero-Day dạng chuỗi mới nhanh hơn bất kỳ ai có thể phân loại chúng, và cùng lúc đó là vấn đề mã độc đã được công nghiệp hóa — bản thân các kênh phân phối đã bị đầu độc trên diện rộng. Việc phát hiện lỗ hổng bị vũ khí hóa ở một bên, việc phân phối mã độc bị vũ khí hóa ở bên còn lại. Một thế gọng kìm.

Tôi đã viết cách đây vài tháng rằng Mã nguồn mở đã chết vào tháng Ba. Tôi sẽ rút lại điều đó một chút. Nó không chết. Nó bị trưng dụng. Và nó sắp phải trưởng thành theo cách khó khăn.

Tất cả những gì sau đây là một bản dự báo. Tôi sẽ nói cho bạn biết điều gì tôi nghĩ sẽ xảy ra tiếp theo — chứ không phải điều gì nên xảy ra.

Cái gì sẽ ở lại (và cái gì không)

Vậy đứa trẻ đó sẽ trông như thế nào khi trở về nhà? Hình dáng của nó đã đủ rõ ràng để gọi tên.

Hãy bắt đầu với phần mà mọi người thường hiểu lầm ngay khi đọc những bài viết thế này và bắt đầu phản đối: Open Source viết hoa (Open Source với tư cách là một khái niệm) sẽ không đi đâu cả, và nó cũng sẽ không thực sự thay đổi. Open Source là một định nghĩa về giấy phép, được OSI quản lý trong nhiều thập kỷ — và thẩm quyền của họ hoạt động theo cách mà mọi thẩm quyền trong thế giới mã nguồn mở vẫn vận hành: nó tồn tại vì mọi người tiếp tục lựa chọn công nhận nó. Đó không phải là một điểm yếu. Đó là cả một mô hình. Định nghĩa đó vẫn ổn. Nó sẽ vượt qua tất cả những chuyện này mà không hề hấn gì. Không ai sẽ tấn công OSI cả.

Điều sẽ thay đổi là những gì các doanh nghiệp sẵn sàng — và rất sớm thôi, là được phép — tiêu thụ. Cuộc chiến này sẽ không viết lại định nghĩa. Nó sẽ chia cộng đồng thành hai nửa.

Một bên: mã nguồn mở tuân thủ các điều khoản mà doanh nghiệp cần — có thể liên lạc được, được vá lỗi, có trách nhiệm giải trình, có thể chứng minh rằng nó vẫn đang tồn tại. Đó là phần mà một công ty nghiêm túc có thể dựa vào để xây dựng. Và đây là dự đoán của tôi: trong vòng vài năm tới, các doanh nghiệp trong lĩnh vực được kiểm soát sẽ không còn quyền lựa chọn tiêu chuẩn đó nữa — họ sẽ bắt buộc phải tuân thủ nó.

Bên còn lại: tất cả những thứ khác. Mọi dự án không thể đáp ứng các điều khoản đó, hoặc không muốn, hoặc ngay từ đầu đã không có ý định làm vậy. Và điều đó hoàn toàn ổn — không ai ép buộc các dự án đó phải tham gia cuộc chơi, và cũng không ai có thể làm vậy nếu họ muốn. Đó chưa bao giờ là cách mã nguồn mở vận hành, và nó sẽ không bắt đầu theo cách đó bây giờ. Phía đó sẽ không biến mất. Nó vẫn tiếp tục phát hành mã, vẫn tiếp tục là mã nguồn mở như nó vẫn thế. Nó chỉ đơn giản là không còn là thứ mà một doanh nghiệp có quy định ràng buộc có thể dựa dẫm vào mà không có một kế hoạch dự phòng.

Và cũng nên ghi nhận ngay từ bây giờ những người sẽ tỏ ra có tầm nhìn xa trông rộng khi mọi chuyện ngã ngũ: đó là cộng đồng Phần mềm Tự do (Free Software). Những người tin tưởng tuyệt đối vào GPL, những người ưu tiên "tự do" chứ không phải "miễn phí" — những người mà phần còn lại của chúng ta từng coi là những kẻ duy ý chí khi chúng ta xây dựng doanh nghiệp trên nền tảng của thứ mà họ liên tục bảo chúng ta phải coi trọng. Họ chưa bao giờ giả vờ rằng bất kỳ điều gì trong số này là miễn phí theo kiểu "bia miễn phí" (free-as-in-beer). Đó là toàn bộ quan điểm của họ, được tuyên bố rõ ràng trong suốt bốn mươi năm qua. Họ là những người phản đối có lương tâm, những người đã nhìn vào mã nguồn mở thương mại cách đây hai mươi năm và nói: đây không phải cuộc chiến của tôi. Hãy nhớ lấy ý nghĩ đó. Chúng ta sẽ quay lại với họ.

Thứ mà tôi không thể gọi tên

Nửa đầu tiên — phần sẽ gánh vác thế giới doanh nghiệp trên lưng mình — cần một cái tên. Và tôi không có cái tên nào cả. Tôi đã thử; chúng ta sẽ bàn về điều đó ở cuối bài. Hiện tại, hãy gọi nó là "nhóm nhỏ" (the subset).

Vậy để nằm trong nhóm đó thực sự cần những gì? Đầu tiên, không liên quan gì đến giấy phép cả. Các điều khoản là về việc liệu có ai đang "ở nhà" hay không. Dự án có thể liên lạc được không? Có quy trình công bố lỗ hổng không? Nó có thể chứng minh là nó vẫn còn hoạt động không? Liệu nó có ở đó để vá lỗi mà AI tìm thấy vào thứ Ba tới không?

Và nó sẽ đến từ khắp mọi nơi. Các dự án do một người duy trì, dự án cộng đồng, dự án của tổ chức, dự án của tập đoàn — không nhãn dán nào trong số đó quyết định điều này. Sẽ có một vài dự án thuộc mỗi loại chọn đáp ứng tiêu chuẩn. Và cũng sẽ có nhiều dự án không chọn. Một lần nữa: điều đó hoàn toàn ổn.

Và để làm rõ, đây không phải là một giấy phép mới, và nó không phải là một nhánh rẽ của định nghĩa gốc. Đó là một tư thế (posture) — thứ mà một dự án lựa chọn áp dụng hoặc không. Những dự án không áp dụng thì không nợ bạn bất cứ điều gì. Họ chưa bao giờ nợ, và không ai nên giả vờ như vậy. Nếu bạn muốn tiếp tục sử dụng phần mềm đã từ chối tham gia, bạn có hai lựa chọn: tìm một nhà cung cấp sẽ thay bạn gánh vác nó, hoặc sử dụng thứ khác.

Bằng chứng của sự sống (Proof of life)

Vấn đề hóc búa nằm dưới tất cả những điều này: bạn không thể biết một dự án mã nguồn mở bình thường là đang sống hay đã chết cho đến khi quá muộn. Không có máy đo nhịp tim. Một dự án trông hoàn toàn giống nhau vào ngày trước khi người duy trì rời đi cũng như ngày sau đó. Bạn chỉ phát hiện ra nó đã bị bỏ rơi khi bạn cần một bản vá và không ai trả lời.

Vì vậy, "nhóm nhỏ" này cần một nhịp tim. Một bằng chứng của sự sống. Một kiểu tín hiệu "vẫn ổn" (keep-alive), một "công tắc tử thần" (dead man's switch), một cách để liên tục chứng minh rằng ai đó vẫn ở đó và sẽ vẫn ở đó khi có vấn đề xảy ra. Có lẽ còn nhiều hơn thế nữa — một chính sách bảo mật thực sự, một cách để xử lý các công bố lỗ hổng, những loại nghĩa vụ mà Đạo luật Kháng chấn Không gian mạng (CRA) đã bắt đầu soạn thảo. Điểm mấu chốt là việc trở thành thành viên không phải là một chiếc huy hiệu bạn giành được một lần rồi treo lên tường. Đó là trạng thái hiện tại, phải được chứng minh lại liên tục.

Nhưng yêu cầu về nhịp tim nghe có vẻ lạnh lùng, và thực ra không nên như vậy. Bởi vì mặt ngược lại của việc "chứng minh bạn vẫn ở đây" phải là một cách để bước ra đi với sự tự trọng còn nguyên vẹn. Những người duy trì (maintainers) sẽ bị kiệt sức. Mọi người sẽ chuyển sang việc khác. Một người đã gánh vác một thư viện quan trọng trong mười lăm năm được phép đặt nó xuống. Người duy trì xz-utils đã không có một nơi nào tốt để bàn giao chìa khóa — và tất cả chúng ta đều thấy kết quả như thế nào.

Vì vậy, bạn cần một "nhà dưỡng lão". Một thứ gì đó như EmeritOSS: một nơi mà dự án sẽ đến khi người duy trì đã hoàn thành nhiệm vụ nhưng những người ở hạ nguồn thì chưa. Một cách duyên dáng để gác kiếm. Mã nguồn vẫn tiếp tục được chăm sóc, người dùng vẫn an toàn, và không ai bị kỳ vọng phải làm việc mãi mãi. Đó không phải là hệ thống thất bại. Đó là một hệ thống nhân văn.

Miễn phí như nuôi một chú cún

Bây giờ là phần mà mọi người thường hiểu lầm như một lời đe dọa. Bạn có thể chạy toàn bộ "nhóm nhỏ" này miễn phí. Mãi mãi. Bạn sẽ không bao giờ phải trả cho bất kỳ ai một xu nào.

Chỉ là từ "miễn phí" (free) chưa bao giờ là từ đúng. Nó luôn là miễn phí như nuôi một chú cún (free as in puppy), chứ không phải miễn phí như một cốc bia (free as in beer).

Bạn không mất gì để nhận nuôi chú cún. Nhưng cái giá bạn phải trả là phần đời còn lại của mình theo từng phần nhỏ mỗi ngày. Bạn phải cho nó ăn — ở đây có nghĩa là phải sống ở "vùng biên" (bleeding edge), vì "nhóm nhỏ" chỉ vá lỗi cho phiên bản mới nhất. Sẽ không có bản vá nào cho phiên bản bạn đã đóng băng từ ba năm trước và ngừng quan tâm đến. Bạn phải dắt nó đi dạo — liên tục di chuyển, liên tục nâng cấp, liên tục cập nhật. Và bạn phải sẵn sàng tìm nhà mới cho nó vào ngày nó không còn thuộc về bạn nữa — ngày mà một dự án rơi ra khỏi "nhóm nhỏ", bạn cần phải sẵn sàng để từ bỏ nó.

Đó là thỏa thuận. Một thỏa thuận công bằng. Chi phí chưa bao giờ là phí cấp phép. Nó luôn là công sức của việc sở hữu, và chúng ta chỉ vừa trải qua hai mươi năm giả vờ rằng chú cún đó có thể tự lớn lên.

Ai sẽ gánh vác thay bạn

Đây là phần mà nó bắt đầu giống như một bài quảng cáo cho Chainguard và một âm mưu nhằm tiêu diệt mã nguồn mở. Tôi đã có thể nghe thấy: hắn ta đang cố bán thứ gì đó cho bạn.

…Có lẽ vậy? Tôi đang cố gắng xây dựng một thứ mà tôi nghĩ rất nhiều người sắp muốn mua. Để làm được điều đó, tôi phải đưa ra một dự đoán về những gì sắp xảy ra và sau đó phải dự đoán đúng. Bài viết này chính là dự đoán đó. Và thực sự, tôi thấy hãnh diện khi bạn nghĩ blog của tôi đủ ảnh hưởng để định hướng lại mô hình mua sắm của cả một ngành công nghiệp và thực hiện được điều mà Microsoft đã dành hai thập kỷ cùng hàng tỷ đô la để thất bại — tiêu diệt mã nguồn mở. Tôi không giỏi đến thế. Không ai giỏi đến thế cả.

Con đường miễn phí vẫn mở. Nó không đóng lại. Các nhà cung cấp không phải là những "người gác cổng" đứng giữa bạn và phần mềm — phần mềm vẫn ở đó, miễn phí, ở vị trí cũ của nó. Những gì các nhà cung cấp thực sự bán là sự giải thoát khỏi hai loại chi phí mà bạn không thể tự chi trả.

Bạn không muốn sống ở "vùng biên"? Đó là một loại thuế, và bạn có thể trả tiền cho ai đó để gánh vác nó — các nhánh LTS, các bản vá lỗi được đưa ngược trở lại (backported fixes), một người khác hấp thụ vòng xoáy nâng cấp liên tục để hệ thống của bạn không phải sống ở phiên bản đầu tiên của mã nguồn. Bạn không thể gỡ bỏ một dự án khỏi hệ thống vận hành ngay trong buổi chiều nó bị loại khỏi "nhóm nhỏ"? Đó là thứ khác mà bạn đang mua: một vùng đệm. Một người nào đó giữ nó an toàn trong khi bạn di cư theo lịch trình của con người thay vì lịch trình của sự hoảng loạn.

Nếu bằng chứng của sự sống và nhà dưỡng lão là những lối thoát được lên kế hoạch một cách duyên dáng, thì nhà cung cấp là phòng cấp cứu — nơi bạn gọi khi một dự án sụp đổ mà không có cảnh báo và bạn cần nó ổn định ngay lập tức. Hai kiểu thất bại khác nhau, hai câu trả lời khác nhau.

Một cách đóng khung trung thực: đó là một người dắt chó thuê và một người huấn luyện, luôn sẵn sàng. Chú chó vẫn là của bạn. Chú chó vẫn miễn phí. Bạn trả tiền để bạn không phải trực tiếp thực hiện mọi chuyến đi dạo, và để có một chuyên gia sẵn sàng hỗ trợ vào ngày nó vô tình cắn ai đó.

Không có hợp đồng nào trong thế giới mã nguồn mở. Chỉ có trạng thái hiện tại. Nhà cung cấp là nơi duy nhất bạn có thể mua một hợp đồng thực sự, được phủ lên trên một hệ thống vốn không cung cấp cho bạn bất kỳ hợp đồng nào.

"Chỉ cần trả tiền cho người duy trì"

Tôi biết. Tôi có thể nghe thấy nửa còn lại của căn phòng đang nói: Hoặc là những công ty tham lam này chỉ cần trả tiền cho những người duy trì.

Đúng. Họ có thể. Thậm chí họ nên làm vậy. Tôi không phải là kẻ nói-không-với-việc-trả-tiền-cho-người-duy-trì.

Nhưng tôi đã nói điều tương tự từ năm 2021 và tôi sẽ nói lại: đây là vấn đề về phân phối, không phải vấn đề về nguồn vốn. Tiền không phải là phần khó nhất. Các tập đoàn có ngân sách và hầu hết đều sẵn lòng chi trả. Phần khó khăn là kết nối hàng ngàn công ty với hàng ngàn thư viện phụ thuộc, mỗi thư viện có người duy trì riêng, mong muốn riêng, khả năng tiếp nhận việc trả tiền riêng. Nhận tiền là một việc khó. Hóa ra việc cho tiền đi thậm chí còn khó hơn. Filippo đã viết một hướng dẫn xuất sắc về cách thực hiện điều này tốt, và độ dài của danh sách các điều kiện tiên quyết của anh ấy chính là bằng chứng — điều này không thể mở rộng bằng vũ lực.

Những người duy trì hoàn toàn có thể bước vào lớp thương mại theo các điều khoản của riêng họ. Bán một hợp đồng hứa rằng bạn sẽ không biến mất. Bán các bản vá lỗi cũ (backports) dưới một giấy phép khác. Trở thành nhà cung cấp của chính mình. Lựa chọn đó là có thật, và quyền được chọn nó chính là mục tiêu của tất cả những chuyện này. Nó chỉ là, tự thân nó, không giải quyết được vấn đề kết nối cho mười ngàn công ty cùng một lúc.

Ai sẽ tổ chức tất cả (và không, đây không phải là thảm kịch của mảnh đất chung)

Hãy để tôi dập tắt một cách đóng khung vấn đề, vì nó sai lầm và cứ lặp đi lặp lại. Đây không phải là "thảm kịch của mảnh đất chung" (tragedy of the commons). Một mảnh đất chung bị phá hủy do chăn thả quá mức — bởi quá nhiều người tiêu thụ một thứ hữu hạn, có thể cạn kiệt. Mã nguồn không phải là thứ đó. Việc tôi sử dụng một thư viện không làm cho bạn còn ít thư viện đó hơn. Không có gì bị chăn thả quá mức cả. Những gì thực sự xảy ra là lớp bảo trì và lòng tin bên dưới mọi thứ chưa bao giờ được tài trợ và chưa bao giờ được cấu trúc để tương xứng với mức độ chịu tải mà mã nguồn đó đã âm thầm đảm nhiệm. Đó không phải là sự cạn kiệt. Đó là một vấn đề phân phối đang khoác một chiếc áo lớn hơn.

Và câu trả lời cho một vấn đề phân phối là sự tổng hợp (aggregation). Các tổ chức nền tảng (foundations) và các cộng đồng lớn là cách mà một nỗ lực tình nguyện trải rộng có được cấu trúc. Một đối tác duy nhất để tài trợ thay vì mười ngàn. Một chủ sở hữu rõ ràng để ký kết. Quản trị được tách biệt khỏi tiền bạc, để những người duy trì không bao giờ sợ mất quyền kiểm soát dự án của chính họ. Và một tín hiệu đáng tin cậy rằng đúng, thứ này vẫn còn sống, và có ai đó chịu trách nhiệm về nó.

Luật pháp đã bắt đầu hội tụ chính xác vào điều này. Đạo luật Kháng chấn Không gian mạng (Cyber Resilience Act - CRA) của EU đã phát minh ra một danh mục gọi là steward (người giám hộ) — một pháp nhân cung cấp sự hỗ trợ bền vững và đảm bảo khả năng tồn tại của mã nguồn mở được sử dụng trong thương mại. Đó là luật pháp đang chính thức hóa vai trò này. Tôi không phát minh ra "nhóm nhỏ" này. Tôi đang quan sát nó hình thành trong thời gian thực, từ nhiều hướng cùng một lúc, và cố gắng mô tả nó rõ ràng trước khi ai đó định nghĩa nó một cách tồi tệ.

Nó đã trưởng thành

Vậy tất cả những điều này sẽ dẫn đến đâu? Không phải dẫn đến thảm họa, và cũng không phải là một thế giới mã nguồn mở lý tưởng. Nó dẫn đến một nơi hữu ích hơn cả hai: sự trung thực.

Tuổi thơ thực sự rất tuyệt vời. Những gì đến tiếp theo thật tàn khốc và bất công — mã nguồn mở đã không lựa chọn bất kỳ điều gì trong số này. Nhưng thứ bước ra ở phía bên kia là một người trưởng thành. Kiên cường hơn. Có trách nhiệm hơn. Không còn tin rằng mình là bất bại. Nó đã trưởng thành theo cách khó khăn, đó là cách duy nhất mà bất kỳ ai thực sự lớn lên.

Ồ — và những người phản đối có lương tâm. Cộng đồng Phần mềm Tự do mà chúng ta đã nhắc đến ở phần trước. Những người sáng lập open-core và cộng đồng được hậu thuẫn bởi các quỹ mạo hiểm, đang ở giữa giai đoạn kiểm tra bảo mật và nộp hồ sơ CRA, sẽ liếc nhìn những người ủng hộ GPL nhiệt thành và mong đợi thấy họ đắc thắng. Mong đợi một câu nói "Tôi đã bảo mà". Nhưng những người theo chủ nghĩa thuần túy đó chưa bao giờ quan tâm đến việc ghi điểm. Họ chưa bao giờ tham gia vào cuộc đua áp dụng cho doanh nghiệp, chưa bao giờ lấy đó làm thước đo cho bản thân. Hãy hỏi một người trong số họ nghĩ gì về toàn bộ cuộc thanh lọc thương mại này và câu trả lời trung thực nhất sẽ giống như của Don Draper: "Tôi chẳng bao giờ nghĩ về các anh cả." Chúng ta đã giả định mình là nhân vật chính. Còn họ thậm chí còn chẳng buồn đọc kịch bản.

Để rõ ràng về mức độ tin cậy của điều này: Tôi có thể sai về tất cả. Đó là ý nghĩa của một bản dự báo — một cách để sai lầm một cách công khai, có lưu lại bằng chứng, kèm theo một mốc thời gian. Nhưng hình dáng của dự báo này đã trở nên rõ ràng hơn trong một năm qua, và nó vẫn chưa hề thay đổi.

Điều đó đưa tôi quay lại với cái tên.

Tôi vẫn chưa có một cái tên nào. Enterprise Source nghe giống như một sự phản bội ngay khi bạn nói ra. Resilient Source thì quá mềm mỏng đến mức vô nghĩa. Load-bearing Source thể hiện đúng trọng trách nhưng không nói lên được bản chất của thỏa thuận. Tôi đã thử hàng chục cái tên khác và ghét tất cả chúng.

Nhưng chúng ta cần một cái tên, và cần nó nhanh chóng. Đặt tên cho một thứ là cách bạn bắt đầu coi trọng nó — đó là hành động giám hộ thực sự đầu tiên. Danh mục này đã đang hình thành, đã đang thu thập các thành viên, và các cơ quan quản lý đã đang đưa từ vựng của riêng họ cho nó vào luật pháp. Nếu những người xây dựng và duy trì phần mềm này không đặt tên cho nó, ai đó khác sẽ làm, và chúng ta sẽ dành cả thập kỷ tới để sống bên trong bất kỳ thuật ngữ nào mà họ chọn.

Vì vậy, đó là nhiệm vụ của bài viết này. Không phải để đặt tên cho thứ đó — mà là để mô tả nó. Nó là gì, nó hoạt động như thế nào, nó tốn kém bao nhiêu, nó hứa hẹn điều gì. Cái tên phải đến từ những người sẽ sống dưới trướng của nó, theo cùng một cách mà mọi thứ khác trong thế giới mã nguồn mở được quyết định: bằng sự sử dụng rộng rãi, chứ không phải bằng sắc lệnh.

Nó đang nằm ngay đó. Ai đó hãy đặt tên cho nó đi.

Đọc thêm