Chương 6: Open Source Cũng Cần Chủ Quyền Và Quy Tắc
Đến ngày kho mã LearnFree nhận pull request thứ năm mươi, Khải đã thôi đếm sao trên GitHub. Hà Phương thì bắt đầu đếm những thứ khác: số lỗi bảo mật còn mở, thời gian chờ duyệt code, số người mà nếu họ nghỉ thì dự án đứng hình, các thư viện phụ thuộc cần cập nhật, số người duy trì còn hoạt động, tần suất phát hành phiên bản.
“Cộng đồng không lớn bằng số người bấm sao,” Phương nói. “Cộng đồng là số người còn quay lại và chịu trách nhiệm.”
LearnFree có một nhóm nòng cốt nhỏ: Khải, Phương, hai kỹ sư, một người phụ trách nội dung và sản phẩm, một nhà thiết kế bán thời gian. Trong năm đầu, khoảng vài chục người đóng góp đã có code hoặc nội dung được hợp nhất. Không phải hai nghìn người, càng không phải bốn mươi lăm nghìn. Có người chỉ sửa lỗi chính tả, có người thêm bản dịch, có người đóng góp cả một tính năng đáng kể.
Khải muốn gọi tất cả họ là “chủ sở hữu”. Luật sư Lê Minh Anh sửa lại: “Giấy phép trao quyền sử dụng. Cơ chế duy trì dự án trao vai trò ra quyết định. Còn thương hiệu, dữ liệu và nội dung lại là những quyền khác nữa.”
Khải bật cười. “Chị không cho em dùng chữ ‘chủ sở hữu’ nữa à?”
“Cứ dùng, khi em nói chính xác là chủ sở hữu của cái gì.”
Sau khi rà soát pháp lý, dự án chọn một giấy phép mã nguồn mở phù hợp với mục tiêu cho phép tái sử dụng và khuyến khích đóng góp, ghi rõ trong tệp giới thiệu. Tài liệu giáo dục có giấy phép riêng ở những nơi cần thiết. Tên và logo có chính sách thương hiệu riêng. Cơ sở dữ liệu người dùng và khóa bí mật của hệ thống thật không bao giờ nằm trong kho mã. Mô hình và tập dữ liệu chỉ được công bố khi quyền và sự đồng ý cho phép. Dữ liệu mẫu trong kho là dữ liệu giả hoặc đã ẩn danh phù hợp, không phải bản trích từ hệ thống thật.
Một người đóng góp mở chủ đề hỏi: “Nếu mọi thứ đều mở, tôi có thể ra mắt LearnFreePro dùng cùng tên không?” Phương trả lời: “Giấy phép code có thể cho phép fork và tái sử dụng theo điều khoản, nhưng thương hiệu và tên gọi không tự động đi kèm. Bản fork phải tuân thủ giấy phép và không được gây nhầm lẫn rằng mình có liên kết với dự án.”
Khải nhớ tới EduPro. Ngày trước, anh nghĩ mở code nghĩa là “chẳng ai ăn cắp được vì ai cũng có”. Giờ anh hiểu mã nguồn mở không xóa được tranh chấp; nó chỉ thay một phần tranh chấp ngầm bằng những quy tắc công khai hơn. Nếu quy tắc mơ hồ, người ta vẫn cãi nhau như thường.
Quản trị còn khó hơn chọn giấy phép. Ai được hợp nhất code? Ai phát hành phiên bản? Ai xử lý báo cáo bảo mật? Ai có quyền đổi lộ trình? Ai được dùng tiền quyên góp hay tài trợ? Khải từng mặc định người sáng lập quyết hết. Phương muốn có một hội đồng duy trì nhỏ.
“Nếu anh biến LearnFree thành dự án mà pull request nào cuối cùng cũng phải chờ anh gật đầu,” Phương nói, “thì kho mã mở chỉ là một startup cho người ta nhìn thấy code thôi.” Khải không thích nghe, nhưng đồng ý thử.
Chính sách duy trì dự án được viết ra: ngưỡng duyệt code tùy theo mức độ rủi ro, nhánh chính được bảo vệ, phát hành cần phê duyệt, thay đổi nhạy cảm về bảo mật phải có người duyệt khác ngoài người viết. Có lộ trình cho người đóng góp mới, có quy tắc ứng xử, có cách giải quyết bất đồng. Không phải dân chủ trực tiếp cho từng commit, nhưng cũng không còn là vương quốc của người sáng lập.
Tiền bạc lại là một bài toán khác. Khải từng tuyên bố LearnFree sẽ “miễn phí mãi mãi, không quảng cáo, không gói trả phí”. Phương hỏi lại: “Vậy tiền máy chủ, tiền kiểm duyệt nội dung, hỗ trợ người dùng và lương lấy ở đâu?” Tiền quyên góp tháng đầu rất ít. Một khoản tài trợ giáo dục nhỏ đủ cho một đợt thí điểm. Một tổ chức xã hội trả phí để được hỗ trợ triển khai riêng, và hai trường tư muốn ký hợp đồng hỗ trợ.
“Bán dịch vụ hỗ trợ có đi ngược tinh thần mã nguồn mở không?” Khải băn khoăn.
“Không,” Minh Anh đáp. “Code miễn phí và mở không có nghĩa mọi dịch vụ đều phải miễn phí. Chỉ cần minh bạch về giấy phép và mô hình kinh doanh.”
LearnFree lập một tổ chức phi lợi nhuận để giữ tài sản chung của cộng đồng, còn một đơn vị dịch vụ nhỏ lo các hợp đồng hỗ trợ và triển khai, với cơ chế tách bạch đủ rõ theo tư vấn của luật sư và kế toán. Không phải một quỹ toàn cầu, không có hàng triệu đô la tài trợ, chỉ đủ để nhóm nòng cốt nhận lương khiêm tốn và hạ tầng chạy được.
Khải còn muốn công bố mô hình chấm phát âm. Phương hỏi ngay về dữ liệu. Nhóm đã thu một tập dữ liệu mới với sự đồng ý và quyền sử dụng rõ ràng hơn, nhưng chưa đủ đa dạng. Một bài kiểm tra cho thấy mô hình phản hồi kém hơn với một số giọng vùng miền và điều kiện thu âm.
“Nếu mình phát hành sớm thì sao?” Khải hỏi.
Người phụ trách nội dung phản đối: “Đừng để học sinh nghĩ giọng của các em ‘sai’ chỉ vì máy không hiểu.” Họ hoãn tính năng chấm điểm có độ tin cậy cao, chỉ thử nghiệm phản hồi hạn chế và luôn cho giáo viên hoặc người học quyền bỏ qua kết quả của máy. Mã nguồn mở không làm thiên lệch của mô hình biến mất; nó chỉ cho người khác cơ hội xem xét nếu mô hình, dữ liệu và giấy phép cho phép. Chất lượng vẫn phải được kiểm thử.
Sang năm thứ hai, LearnFree có vài chục nghìn người dùng hoạt động, không phải tám triệu người trên toàn cầu. Đủ để hóa đơn máy chủ trở nên đáng kể, đủ để có lỗi thật, đủ để những người duy trì thấm mệt. Một lần, một lỗ hổng trong thư viện phụ thuộc được công bố; nhóm bảo mật cùng cộng đồng phát hành bản cập nhật, ra cảnh báo và thông báo cho người dùng. Khải không đăng dòng “mã nguồn mở an toàn hơn mã nguồn đóng”. Anh đã bỏ những niềm tin tuyệt đối. Mã nguồn mở có lợi thế và rủi ro riêng; điều quan trọng là cơ chế quản trị phản ứng kịp.
Mẹ anh hỏi qua điện thoại: “Thế giờ code của con cho ai lấy cũng được à?”
“Cho dùng theo giấy phép mẹ ạ.”
“Giấy phép?”
“Giống sách trong thư viện. Được mượn, được đọc, nhưng không có nghĩa là được xé tên tác giả hay lấy sổ ghi tên người mượn.”
Bà Hoa gật gù. “Thế nói vậy từ đầu có phải dễ hiểu không.” Khải bật cười.
LearnFree lớn lên chậm hơn những câu chuyện người ta thích kể, nhưng mỗi tầng đều có quy tắc rõ hơn: code, nội dung, dữ liệu, thương hiệu, người duy trì, tài chính, bảo mật. Dự án còn học thêm một bài về quyền phát hành. Ban đầu chỉ Khải được tạo bản phát hành chính thức, vì tài khoản đầu tiên đứng tên anh.
“Nếu anh nghỉ một tháng thì dự án dừng luôn à?” Phương hỏi.
Họ chuyển quyền phát hành sang một vai trò của nhóm, có xác thực nhiều lớp và quyền tối thiểu, cần phê duyệt phù hợp và để lại nhật ký. Không chia sẻ mật khẩu của người sáng lập, không giữ khóa ký phát hành trên một chiếc laptop cá nhân duy nhất. Thương hiệu, tên miền và tài khoản đăng ký gói phần mềm cũng được chuyển về tài khoản của tổ chức, kèm quy trình khôi phục.
Khải nhận ra quản trị một dự án mã nguồn mở còn có cả một tầng hạ tầng vô hình: tên miền, kho gói phần mềm, quyền phát hành, tài khoản nhận quyên góp và hóa đơn điện toán đám mây. Nếu mọi thứ vẫn đứng tên người sáng lập, code dù mở cho cộng đồng thì dự án vẫn có một điểm chết duy nhất. Họ soạn tài liệu kế nhiệm cho các vai trò duy trì và quy trình truy cập khẩn cấp. Không lãng mạn chút nào, nhưng đó là thứ giúp LearnFree sống được cả khi Khải không trực tuyến.
Mỗi quý, nhóm rà soát xem ai đang giữ quyền phát hành, quyền với kho gói và quyền vào hệ thống thật; quyền nào không dùng tới sẽ bị thu lại hoặc hạ cấp, không giữ “phòng khi cần”. Không khẩu hiệu nào về sở hữu chung đủ sức thay thế những quyền và trách nhiệm cụ thể ấy.