Thứ Sáu, 16 tháng 3, 2012

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

Thứ Năm, 15 tháng 3, 2012

Tạo hệ thống dual boot của Windows 7 và Windows 8

Quản Trị Mạng - Sự xuất hiện chính thức của Windows 8 trong thời gian gần đây đã khiến cho người sử dụng tò mò về hệ thống tính năng và giao diện vô cùng mới mẻ của hệ điều hành này. Nhưng chắc chắn rằng phải còn rất lâu nữa chúng ta mới có thể “từ bỏ” Windows 7 hoặc XP để chuyển sang Windows 8. Trong bài viết dưới đây, chúng tôi sẽ hướng dẫn các bạn cách tạo hệ thống dual boot giữa Windows 7 và 8 theo cách hết sức đơn giản và dễ dàng.

1. Tạo VHD:

Để thực hiện việc này, các bạn mở mục Run (Windows + R), gõ diskmgmt.msc và nhấn Enter:
Gõ diskmgmt.ms
Bảng điều khiển MMC hiển thị, và tại đây các bạn sẽ thấy tiện ích Disk Management đi kèm:
Disk Management
Và để tạo mới VHD, nhấn menu Action trên thanh Toolbar, sau đó chọn Create VHD:
Sử dụng chức năng
Chọn thư mục lưu trữ cho file VHD, khởi tạo dung lượng ban đầu (tối thiểu là 20 GB), và các bạn nên chọn chế độ Fixed Size để tăng hiệu suất hoạt động:
Chọn chế độ Fixed Size
Sau đó, Windows sẽ tiến hành tạo file VHD. Diễn biến quá trình này sẽ được hiển thị đầy đủ và chính xác trên thanh Status Bar của MMC snap-in:
Khi hoàn tất, file ổ cứng ảo này sẽ được liệt kê trong danh sách Partition tại cửa sổ Disk Management. Nhấn chuột phải vào file VHD đó và chọn Initialize Disk:
Initialize Disk
Giữ nguyên chế độ MBR(Master Boot Record) và nhấn OK:
Chọn MBR(Master Boot Record)
Bước tiếp theo ở đây là tạo Volume trên phân vùng đó. Nhấn chuột phải vào phân vùng màu đen và chọn New Simple Volume:
Tạo New Simple Volume
Giữ nguyên các tùy chọn mặc định trong cửa sổ Wizard hiển thị tiếp theo, các bạn có thể thay đổi Volume thành Windows 8, sau đó nhấn Next > Finish để kết thúc:
Và file VHD của chúng ta đã có thể hoạt động như 1 phân vùng ổ cứng thật:

2. Cài Windows 8 trên phân vùng VHD:

Việc đầu tiên cần làm ở đây là mở PowerShell (Start Menu >All Programs >Accessories >Windows Powershell) dưới quyền Administrator:
Khi PowerShell khởi động, các bạn cần phải thay đổi chính sách thực thi để cho phép tài khoản người dùng chạy đoạn script cần thiết. Gõ lệnh “Set-ExecutionPolicy RemoteSigned”, hệ thống sẽ hiển thị thông báo với nhiều tùy chọn, nhấn Y và nhấn Enter để xác nhận. Và sau khi hoàn tất, giữ nguyên cửa sổ PowerShell như lúc ban đầu:
Tiếp theo, tải đoạn mã Install-WindowsImage.ps1 trực tiếp từ Microsoft hoặc tại MediaFire, sau đó copy vào ổ C hoặc bất kỳ thư mục nào khác trên ổ cứng:
Nhấn chuột phải vào file đó và chọn Properties, nhấn nút Unblock như hình dưới:
Và kết hợp file *.ISO của Windows 8 Consumer Preview được download tại đây, sau đó quay trở lại PowerShell và gõ lệnh “CD C:\
Tiếp theo, gõ thêm lệnh như dưới đây:
.\Install-WindowsImage.ps1 –WIM D:\Sources\Install.wim –Apply –Index 1 –Destination I:\
Các bạn nên để ý và thay thế ký tự ổ đĩa với ký tự trong bài thử nghiệm này (đằng sau tham số –WIM). Sau đó nhấn Enter:
Ổ E ở đây là phân vùng VHD được tạo ở bước trên
Khi hoàn tất, hệ thống sẽ hiển thị thông báo như hình dưới:
Sau đó, mở Command Prompt và gõ lệnh bcdboot.exe I:\Windows (giả sử rằng I là ổ đĩa cài Windows 8):
Và khi khởi động hệ thống trong lần tiếp theo, Windows sẽ hiển thị màn hình lựa chọn hệ điều hành mới như hình dưới:

3. Chia sẻ dữ liệu:

Việc cuối cùng cần xử lý ở đây là thay đổi chế độ sử dụng và chia sẻ file giữa 2 hệ điều hành. Để khởi động trực tiếp vào quá trình cài đặt Windows 8, các bạn chuyển tới thư mục tài khoản theo đường dẫn:
C:\Users\[Tên tài khoản]
Nhấn chuột phải vào thư mục Contacts và chọn Properties từ Context Menu, chọn tab Location và nhấn nút Move:
Tiếp theo, chuyển tới thư mục Contacts trên phân vùng chứa Windows 7:
Nhấn OK, và hệ thống sẽ tự động chuyển dữ liệu giữa 2 vị trí đó. Các bạn chỉ cần thực hiện lại thao tác trên với những thư mục sau: Desktop, Downloads, Favorites, Links, My Documents, My Music, My Pictures và My Videos. Rât đơn giản và dễ dàng, chúc các bạn thành công!

Bài đăng phổ biến