Ext JS và Bài Học Về Mã Nguồn Mở
Cách đây ít ngày một thư viện JavaScript/Ajax mà tôi rất thích dùng, Ext JS, đột ngột chuyển giấy phép sử dụng từ LGPL (một phiên bản của GPL cho phép sử dụng phần mềm mã mở trong các dự án thương mại) sang GPL v3 (một giấy phép mã mở chặt chẽ bắt buộc các dự án muốn dùng phần mềm mã mở cũng phải là mã mở) sau khi công bố một bản nâng cấp nhỏ. Điều này đã làm dấy lên một làn sóng phản đối, công kích trong khắp cộng đồng người dùng và phát triển.
Tôi đã dùng Ext JS ngay từ khi nó chỉ là một thư viện mở rộng của YUI.
Đây là một thư viện rất tốt, đặc biệt nó cung cấp những gói UI rất đẹp
và dễ sử dụng — chỉ cần vài dòng code JavaScript bạn đã có thể tạo nên
một giao diện chuyên nghiệp cho ứng dụng web của mình. Lúc này thư viện
có tên là YUI-Ext và được phân phối dưới giấy phép BSD như YUI.
Sau đó Jack Slocum và nhóm phát triển đã đưa thư viện
YUI-Ext vượt khỏi phạm vi của YUI trở thành một dự án độc lập. Khi
version đầu tiên của Ext JS ra lò, giấy phép sử dụng được đổi thành kiểu
“song hành” (dual license): người dùng có thể chọn LGPL (với một vài
hạn chế nhỏ) hay mua giấy phép sử dụng thương mại. Có thể nói đây là một
bước đi không có gì đáng chê trách để Jack và đồng sự có thể kiếm tiền
cho việc phát triển của dự án. Cộng đồng phát triển mã mở vẫn rất vui
lòng đóng góp và ủng hộ cho dự án, hơn 35.000 thành viên của diễn đàn
Ext JS đã đóng góp vô số ý kiến, thông báo lỗi và tạo nên các thư viện
mở rộng (extension) cho chính Ext JS.
Sự kiện Ext JS chuyển giấy phép sử dụng thành GPL (từ
phiên bản 2.1 trở đi) đã gây sốc cho công đồng mã nguồn mở vì nhiều lý
do. Không hẳn vì chúng ta sẽ phải trả tiền cho Ext. Với giấy phép thương
mại hiện tại bạn chỉ cần mua một bản (cho 1 lập trình viên) là có thể
triển khai không hạn chế trên nhiều máy chủ (chính xác hơn là trên số
CPU không giới hạn). Những lý do chính khiển cộng đồng phát triển không
hài lòng là:
- Vấn đề đạo đức: Ext JS khởi đầu là một dự án “ăn theo” YUI, họ nhận được nhiều quan tâm vì danh tiếng của YUI. Sau khi xác lập đựơc vị trí, họ bỏ giấy phép tự do và bắt đầu theo đuổi giấy phép chặt chẽ hơn. Là một dự án mã mở, họ nhận được rất nhiều đóng góp từ cộng đồng và đổi lại cộng đồng phát triển ngày lại càng bị thu hẹp phạm vi sử dụng.
- Vấn đề lòng tin: Bạn có thể tin được một công ty thay đổi giấy phép thường xuyên theo hướng càng kiếm được nhiều tiền càng tốt hay không? Điều gì sẽ xảy ra nếu một ngày đẹp trời nào đó, sau khi triển khai ứng dụng trên hàng chục máy chủ (tức là vài chục CPU), Ext JS đổi giấy phép thương mại từ “unlimited” sang “per-CPU”? Bạn sẽ phải chấp nhận trả một khoản phí “trên trời rơi xuống” hay bỏ mặc ứng dụng của mình không được nâng cấp hay vá lỗi?
- Vấn đề phạm vi giấy phép: Điểm khác biệt giữa LGPL và GPL là giờ đây dự án nào muốn dùng Ext JS miễn phí thì cũng phải là “nguồn mở” theo đúng giấy phép GPL v3. Có ba vấn đề gây tranh cãi là: (1) Vì Javascript được chuyển từ server qua browser người dùng, thì việc này có được coi là “phân phối” mã nguồn và do đó chịu sự rằng buộc của GPL hay không? (2) Việc nén, obfuscate các thư viện Ajax theo GPL có hợp lệ hay không khi người được phân phối (tức là người dùng ứng dụng) không xem được toàn bộ mã nguồn? (2) Theo Jack, mã server-side (Java, PHP…) của dự án cũng phải là nguồn mở mới được dùng Ext JS trong khi một số chuyên gia về giấy phép mã mở cho rằng điều đó là không đúng vì mã JavaScript không có mối liên kết tĩnh (statical link) nào với mã server (?).
- Vấn đề thích hợp: Vì những rắc rối nói trên mà bản thân giấy phép GPL v3 không “bao phủ” được hoàn toàn nên hầu hết các thư viện JavaScript đều chọn các giấy phép nguồn mở tự do hơn như BSD hay Apache 2. Việc Ext JS chọn GPL sẽ để lại các “lỗ hổng” có thể dẫn tới việc tranh tụng trong nhiều trường hợp hay nói cách khác chúng giống như những cái bẫy tiềm năng khiến cho việc sử dụng thư viện này theo hướng mã mở hoặc không thể thực hiện được hoặc không hiệu quả.
Nhiều người nói rằng dùng mã nguồn mở là hướng đi rẻ
tiền, dễ dàng cho các công ty Việt Nam nhưng câu chuyện trên chỉ là một
phần nhỏ trong rất nhiều vấn đề mà các giấy phép mã nguồn mở đặt ra. Tại
Mỹ, muốn có lời khuyên đúng đắn bạn sẽ phải nhờ tới các luật sư có kinh
nghiệm trong lĩnh vực này và không thực sự có nhiều luật sư như vậy
(chắc chắn Jack đã không có được một luật sư tốt).
Qua vụ việc này tôi đã có được nhiều bài học (rất hữu ích cho các CIO), xin tổng kết lại dưới đây:
- Giấy phép sử dụng (mã mở hay thương mại) có thể bị thay đổi bất kỳ lúc nào. Mặc dù việc thay đổi giấy phép không áp dụng ngược với các phiên bản trước nhưng bạn sẽ phải đối mặt với vấn đề “trả tiền để được nâng cấp, hỗ trợ hay bỏ mặc phần mềm đó“. Vì thế nên dùng phần mềm mở do các công ty có uy tín bảo trợ vì thường họ rất ít khi thay đổi giấy phép nếu không có lý do chính đáng.
- Khi dùng mã nguốn mở, bạn phải đánh giá được mức độ rủi ro có thể gây ra do việc đổi giấy phép và chấp nhận mức độ rủi ro này.
- Không phải tất cả các giấy phép mã mở đều giống nhau. Hiểu hết các “ngõ ngách” trong đống ngôn từ của các giấy phép này là việc của các chuyên gia và dù vậy bạn vẫn có thể dính vào kiện tụng do sự diễn dịch khác nhau giữa các bên và khi ấy quyền phán quyết nằm ở tòa án.
- Nếu bạn định phân phối phần mềm của mình dưới giấy phép mã nguồn mở thì hãy suy nghĩ và tìm hiểu thật kỹ về phạm vi của các giấy phép này. Tất nhiên, vì là phần mềm của bạn nên bạn có quyền thay đổi giấy phép bất kỳ lúc nào cho các phiên bản mới, nhưng nếu không có lý do chính đáng cộng đồng mã mở sẽ cho rằng bạn đang lợi dụng mã mở để chuộc lợi và bạn sẽ nhanh chóng bị tẩy chay. Trong thế giới đầy cạnh tranh, bạn sẽ biến mất nhanh hơn bạn tưởng.
Ext JS và cá nhân Jack đang chịu nhiều sức ép từ phía
cộng đồng. Có thể việc thay đổi giấy phép là bắt buộc nhằm kiếm tiền từ
dự án để trả lương cho các lập trình viên nhưng người dùng không khỏi
có cảm giác bất mãn khi đã bỏ công sức xây dựng các ứng dụng dựa vào thư
viện này rồi đột nhiên nhận thấy nó sẽ không thích hợp nếu sử dụng vào
các dự án thương mại hay mã đóng như dự kiến. Quan trọng hơn, việc đổ vỗ
lòng tin khiến cho những người dùng nghiêm túc phải suy nghĩ lại về
quyết định của mình khi đặt niềm tin lâu dài vào Ext JS.
Các bạn có thể tham khảo thêm về “vụ” Ext JS ở các bài viết dưới đây:
Nhận xét
Đăng nhận xét