Web 2.0 Vietnam Logo


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.

extjs-gpl.gif

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à:

  1. 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.
  2. 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?
  3. 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 (?).
  4. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:


Bình Luận

  1. Giấy phép sử dụng - chọn cái nào? :: one true brace | April 29th, 2008 at 9:50 am

    [...] xong bài viết Ext JS và Bài Học Về Mã Nguồn Mở trên blog Web 2.0 – Vietnam, tớ thấy hoa mắt vì sự rắc rối của các loại giấy [...]

  2. Thai | April 30th, 2008 at 1:14 am

    Bài viết được. Chỉ có một lỗi nhỏ (hay gặp) là bồ đã đánh đồng “phần mềm thương mại” (commercial software) với “phần mềm nguồn đóng” (closed source or proprietary software). Hai khái niệm đó không tương đồng với nhau. Phần mềm thương mại vẫn có thể là phần mềm nguồn mở hay tự do. Phần mềm thương mại vẫn có thể sử dụng các thành phần nguồn mở hay tự do trong mã nguồn của chúng. Phần mềm nguồn đóng thì không thể làm được chuyện đó.

    Bản thân tôi cho rằng, không thể trách nhóm Ext JS. Ext JS là của họ, họ có toàn quyền quyết định sẽ sử dụng giấy phép nào.

    Nếu cộng đồng không thích và nếu cộng đồng đủ mạnh, họ hoàn toàn có thể lấy phiên bản cuối cùng của Ext JS phát hành với license LGPL mà phát triển lên tiếp.

    Còn nếu cộng đồng không thể làm chuyện đó, chứng tỏ rằng, phần lớn công sức phát triển Ext JS là của nhóm của Jack, nên họ xứng đáng kiếm được nhiều tiền hơn từ công sức mà họ bỏ ra.

    Vả lại, chọn giấy phép GPLv3 cũng không phải là một quyết định tồi, nếu đứng trên góc nhìn của người ủng hộ phần mềm tự do, nguồn mở.

    Nếu có ai đó phải trách, tôi nghĩ chính là những người sử dụng Ext JS mà không có những nghiên cứu cần thiết về rủi ro hoặc chỉ chăm chăm muốn *bốc lột* công sức của người khác mà không muốn trả tiền.

  3. TanNg | April 30th, 2008 at 1:51 pm

    @Tác giả. Bài viết hay. Open Source, Open content còn cần một chặng đường dài để điều chỉnh và phát triển. Tuy vậy, một khi triết lý đã đúng, thì dù gặp vài trục trặc, cuối cùng phong trào mở vẫn sẽ chiến thắng.

    @Thái. Đồng ý với bạn về việc cộng đồng nếu không thích có thể sử dụng bản cuối cùng để phát triển lên tiếp. Tuy vây, khi nhóm Jack đã sử dụng cộng đồng để phát triển nên sản phẩm này thì họ cũng có nghĩa vụ tham khảo và tôn trọng ý kiến cộng đồng trước khi đưa ra các quyết định quan trọng ảnh hưởng tới nhiều người như thay đổi License từ GPL sang GPL3.

    Bình luận ngang một chút về GPL3. Open Source thường được đánh đồng với Tự do, nhưng tự do nhất có lẽ là BSD license, GPL3 tạo ra quá nhiều ràng buộc khiến người ta phải tuân theo và tự đánh mất triết lý cốt lõi của chính mình. Tôi có cảm giác rằng, thay vì việc định vị mình là phục vụ cộng đồng, phần nào GPL3 đã tự định vị mình là anti mã đóng.

  4. Hồng Quang | April 30th, 2008 at 11:00 pm

    @Thai, @TanNg: Thanks for good comments.

    @Thai: Hình như mình không đề cập gì tới những khái niệm như phần mềm thương mại (commercial software – CS), phần mềm mã đóng (closed source software – CSS). Đây là một vấn đề khá phức tạp, tuy nhiên, để chúng ta không nhầm lẫn về ngữ nghĩa, mình xin làm rõ những điểm này:

    + Phần mềm thương mại: là những phần mềm được làm ra để cho mục đích thương mại (nói nôm na là để bán lấy tiền). Nghĩa là, trong phần lớn trường hợp, bạn sẽ phải phân phối nó cho khách hàng. Thường thì phần mềm thương mại là mã đóng (closed source) và thuộc sở hữu của một cá nhân hay tổ chức (proprietary software). Một số phần mềm thương mại là mã mở, trong trường hợp này nó sẽ có ít nhất hai loại giấy phép (dual license): giấy phép thương mại và giấy phép mã mở.

    + Giấy phép mã mở chủ yếu chi phối việc bạn có được phân phối lại trong các dự án thương mại hay không. Cụ thể LGPL, BSD hay Apache cho phép điều này (với các điều kiện khác nhau một chút), ngược lại GPL thì tuyệt đối không.

    + Vì thế bạn có thể dùng phần mềm mã mở (kể cả loại giấy phép GPL như MySQL) tự do, kg phải trả phí miễn là bạn không có ý định phân phối lại nó (thí dụ, dùng MySQL trong các dự án web của công ty bạn ngay cả dự án đó lớn như FaceBook). Đây là đọan trích từ Giấy Phép Mã Mở của MySQL:

    “Free use for those who never copy, modify or distribute. As long as you never distribute the MySQL Software in any way, you are free to use it for powering your application, irrespective of whether your application is under GPL license or not.”
    (Source: http://www.mysql.com/about/legal/licensing/opensource-license.html)

    Ngược lại, bạn phải dùng giấy phép thương mại do MySQL AB cấp. Xin xem thêm các trường hợp cụ thể bạn phải mua giấy phép ở đây:
    http://www.mysql.com/about/legal/licensing/commercial-license.html

    + Khi phân phối lại các phần mềm mã mở (nếu được phép) bạn phải kèm theo giấy phép và giữ nguyên tham chiếu xuất xứ để người dùng biết được bạn đang dùng các phần mềm mã mở nào, có thể tham khảo mã ở đâu…

    + Nếu bạn mua giấy phép thương mại của một phần mềm mã mở (như của Ext JS hay của MySQL) thì nó sẽ cho phép bạn triển khai trên một số CPU nhất định và/hoặc sử dụng cho số lập trình viên nhất định. Nếu bạn phân phối lại một phần mềm có giấy phép thương mại (thường là dạng thư viện – library) thì tùy trường hợp giấy phép sẽ đòi bạn trả phí thêm cho mỗi bản phân phối (royalty fee) hay kg có rằng buộc này (royalty free). Đương nhiên bạn không cần kèm giấy phép sử dụng và tham chiếu tới các phần mềm bạn mua trong bản phân phối của mình dù nó là mã mở.

    Trường hợp các thư viện JavaScript/Ajax như Ext JS khá đặc biệt. Các thư viện này được “phân phối” từ máy chủ tới browser của người dùng (ít nhất theo lập luận của Jack) nên khi nó chuyển qua giấy phép GPL thì đòi hỏi cả dự án web dùng nó phải là nguồn mở. Đây là điểm gây nhiều tranh cãi:

    1. Liệu việc sử dụng một ứng dụng web có bị coi là phân phối lại phần mềm hay không?

    2. Việc sử dụng một thư viện JavaScript dưới giấy phép GPL có buộc cả dự án phải là mã mở hay không (vì mối liên kết giữa JavaScript và mã server-side có thể chưa đủ mạnh để bị coi là có “liên kết tĩnh” theo định nghĩa của GPL)?

    3. Có được phép nén, obfuscate một thư viện JavaScript dùng giấy phép GPL hay không?

    Nếu xảy ra tranh chấp và tòa án phán quyết rằng việc sử dụng ứng dụng web không bị coi là phân phối lại phần mềm (nhất là việc phân phối lại các mã JavaScript) thì có nghĩa là chúng ta sẽ có thể dùng Ext JS trong các dự án tương tự như dùng MySQL.

    Còn nhiều vấn đề xung quanh câu chuyện này, nhưng hy vọng các bạn sẽ hiểu hơn về các giấy phép mã mở và phạm vi chi phối của chúng.

  5. Trong Truong | May 2nd, 2008 at 2:27 pm

    Cảm ơn anh nhiều. Nhờ anh mà tui đỡ lơ mơ hơn về vụ giấy phép open source này. Nó phức tạp quá mà đọc báo chí lại càng thấy rối rắm hơn.

  6. Nguyễn Đức Thuận | May 8th, 2008 at 1:28 pm

    “Nếu có ai đó phải trách, tôi nghĩ chính là những người sử dụng Ext JS mà không có những nghiên cứu cần thiết về rủi ro hoặc chỉ chăm chăm muốn *bốc lột* công sức của người khác mà không muốn trả tiền.” – Mình thích nhất câu này của “Thai”.

    BSD License hay LGPL đem sự tự do nhiều hơn cho developer nhưng điều đó lại đe dọa freedom của người dùng cuối. Bởi vì các bản sửa đổi có quyền được thương mại hóa và đóng mã nguồn.

    GPL đảm bảo người dùng phần mềm được tự do mãi mãi – một lý tưởng cao đẹp. Mình cảm thấy Ext JS làm vậy không có gì đáng trách.

  7. Mjke or BobVu | May 31st, 2008 at 10:27 am

    Bai viet rat huu ich, Hien tai to cung dang nghien cuu mot so van de ve ext js, noi chung cung da su dung nhieu ma nguon mo, nhung chua bao gio doc cac noi dung dieu luat cua ma nguoi mo. h chac phai xem xet lai coi.
    Thanks

  8. Mjke | May 31st, 2008 at 10:43 am

    @Thai: dong y voi y kien cua ban, ve van de capital, chung ta quen dung co chua qua,
    Con may cai khai niem ve CS hay CSS gi` gi` đó càng tìm hiểu càng thấy phức tạp quá.
    Tốt hết là hãy cứ làm, làm hết sức mình có là được. Chỉ sợ ta không làm được gì thôi. Mọi nỗ lực của bạn sẽ được đền đáp xứng đáng. Cộng đồng cũng phải để cá nhân phát triển, mỗi cá nhân phát triển thì cộng đồng mới phát triển được chứ.
    Thanks

  9. Demifantasy | June 21st, 2008 at 8:48 pm

    Bài viết tổng hợp các thông tin khá hay. Cám ơn anh!

  10. Ext JS và Bài Học Về Mã Nguồn Mở « Ocean | September 22nd, 2008 at 2:38 pm

    [...] Ext JS và Bài Học Về Mã Nguồn Mở <nguồn: http://www.web2vietnam.com/2008/04/29/ext-js-and-lession-of-os-license/&gt; [...]