(Post 09/06/2006) Bạn đã biết gì về phần mềm
mã nguồn mở. Bạn hiểu thế nào về "giấy phép GPL", nó có những
đặc điểm gì? Tính pháp lý của một phần mềm có sử dụng mã nguồn mở là như
thế nào?... Bài viết sau đây sẽ giới thiệu cho các Aptechite những thông
tin bổ ích về một lĩnh vực có rất nhiều tiềm năng này.
Cấu thành cơ bản của một giải pháp phần mềm
Là một loại giá trị phi vật chất, một sản phẩm phần mềm
(software, program) mang nhiều nét đặc thù của một công trình nghiên cứu
khoa học những đồng thời cũng mang trong mình nhiều dấu ấn của quá trình
phát triển và đặc biệt là của các công dụng cụ đã được sử dụng. Đặc điểm
nhị nguyên này gắn liền với đặc thù của quy trình phát triển phần mềm
hiện đại: vừa là quá trình tìm tòi khoa học, vừa là một ngành công nghiệp
với thiết kế mẫu, quy trình chuẩn và các linh kiện dụng cụ có thể sử dụng
và khả năng tự động hóa cao.
Tính khoa học thể hiện rõ nhất ở mối quan hệ liên hoàn
giữa tất cả các khâu trong quá trình tìm tỏi, phát triển giải pháp: từ
việc xác định nội dung bản chất vấn đề (requirement analysis) đến việc
xây dựng các mô hình làm việc (modeling) - xác định kiến trúc tổng thể
cho sản phẩm (architecture) - thiết kế (design) - tìm giải pháp cụ thể
(lập trình – implementation) đến thử nghiệm (test) và khắc phục lỗi (debug).
Kết quả của một bước trước ảnh hưởng quyết định đến các bước sau và với
trình độ phát triển ngày nay vẫn chưa có cách nào để từ một yêu cầu cho
trước không tốn nhiều công suy nghĩ có ngay được kết quả cuối cùng - chương
trình máy tính. Rất nhiều khi do kết quả của công đoạn trước sai hoặc
không tốt mà tất cả nỗ lực ở công đoạn sau đều trở thành vô nghĩa: chương
trình không chạy được hoặc tuy có chạy nhưng sai (có lỗi) và không thể
đáp ứng yêu cầu đã đề ra. Điểm duy nhất ngày nay có thể tự động hóa được
hoàn toàn là việc dịch trương trình từ chỉ dẫn chi tiết (mã nguồn) ra
ngôn ngữ máy – tập hợp các bits và byte mà chúng ta nhìn thấy dưới dạng
file EXE, DLL v.v. trong máy tính.
Nếu định nghĩa tính sáng tạo là những gì nhất thiết đòi
hỏi phải có tư duy của con người thì mọi quá trình có thể tự động hóa
đều không thể coi là có tính sáng tạo. Như vậy tuy giá trị sử dụng của
một chương trình luôn được đo bởi kết quả sử dụng cụ thể của chương trình
đấy, nhưng giá trị lý luận, tính sáng tạo luôn được đo qua kiến trúc,
thiết kế và các giải pháp trước công đoạn cuối cùng – công đoạn dịch ra
ngôn ngữ máy. Một công đoạn khác cũng có thể thực hiện bởi máy móc đó
là việc dịch các lời thoại, menu, chỉ dẫn trong chương trình ra các ngôn
ngữ khác nhau. Chính vì lý do này mà mọi người đều cho rằng việc “Việt
hóa” một phần mềm để đem đi thi sáng tạo là việc làm không thể chấp nhận
được (mặc dù đôi khi “Việt hóa” cũng đòi hỏi phải có những giải pháp nhất
định).
Bên cạnh đòi hỏi cần phải có tư duy, sáng tạo thực sự
còn hàm ý phát minh, tìm tỏi ra giải pháp mới, cách làm mới. Như vậy để
xứng đáng là giải pháp trí tuệ, bên cạnh việc phải có nỗ lực đáng kể trong
quá trình tư duy thiết kế xây dựng giải pháp, những kết quả đạt được -
cụ thể là kiến trúc, thiết kế, giải thuật, cấu trúc dữ liệu của chương
trình - cũng phải có tính mới, tính hữu dụng. Tùy vào giải pháp mới tìm
được nhiều hay ít, tính quyết định của nó đến giải pháp tổng thể cao hay
thấp cũng như tính hữu ích và độc đáo của nó mà chúng ta nói giải pháp
có tính sáng tạo cao hay không. Trong ngành công nghệ phần mềm, mọi người
thường thiên về ý kiến cho rằng các công đoạn trước như phân tích, thiết
kế, tìm giải thuật, cấu trúc dữ liệu đòi hỏi tư duy và kinh nghiệm nhiều
hơn các công đoạn sau như việc thể hiện chúng trong một ngôn ngữ cụ thể
(lập trình) hay thử và cải tiến, khắc phục lỗi.
Bên cạnh là một hoạt động mang tính nghiên cứu, sáng
tạo, sản xuất phần mềm còn là một ngành công nghiệp và vì vậy người ta
tìm mọi cách để rút ngắn quá trình sản xuất và nâng cao năng suất lao
động. Một trong những cách được áp dụng rộng rãi nhất là sử dụng các khuôn
mẫu có sẵn (framework), thư viện lập trình và linh kiện lắp ghép (component).
Các framework thường chỉ bao gồm các cấu trúc cơ bản như kiến trúc hệ
thống, các mẫu thiết tế tối ưu hay các giải pháp mang tính lý thuyết còn
thư viện thường bao gồm 1 tập hợp các giải pháp cụ thể (giải thuật, cấu
trúc dữ liệu, mã nguồn) cho một vấn đề cụ thể (ví dụ tìm giá trị cực tiểu
của một hàm bất kỳ). Các component tuy cũng là những giải pháp cụ thể
nhưng cho phép người thiết kế tùy biến chức năng qua việc xác định các
tham số hoạt động (properties) và ghép nối chúng lại với nhau (lập trình)
thành một giải pháp hoàn chỉnh. Do khả năng tùy biến cao nên một component
có thể “chỉ” là một giải pháp hiển thị kết quả dưới dạng đồ thị nhưng
cũng có thể bao gồm toàn bộ chức năng phức tạp của một chương trình soạn
thảo văn bản như Word©. Như vậy với linh kiện và công cụ thích hợp người
ta có thể nhanh chóng bổ xung tính năng cho 1 phần mềm mà nếu tự phát
triển sẽ phải mất hàng tháng trời nếu không phải là hàng năm! Trong ngành
công nghiệp phần mềm ngày nay, sử dụng linh kiện là giải pháp rất hay
được áp dụng, nhất là trong phương pháp phát triển nhanh (RAD – rapid
application development) như Delphi, Visual Basic hay .NET. Vì vậy việc
xác định tính sáng tạo của một chương trình được xây dựng bởi các linh
kiện đòi hỏi phải xác định xem bản thân các linh kiện đó đã cho phép giải
quyết phần lớn bài toán được đặt ra hay chưa.
Mã nguồn mở, GPL và tính pháp lý của phần mềm
Xuyên suốt các cuộc tranh luận về iCMS và nguồn gốc của
nó là các khái niệm như “mã nguồn mở”, “luật GPL” hay là “Copyright”;
nhiều khi lẫn lộn, nhiều khi sai lầm và đối với các độc giả ngoại đạo
thì chắc chắn là rất khó hiểu.Vậy thực chất chúng là gì và phải hiểu chúng
thế nào cho đúng?
Mã nguồn mở (open-source software (http://en.wikipedia.org/wiki/Open-source))
hiểu theo nghĩa rộng là một khái niệm chung được sử dụng cho tất cả các
phần mềm mà mã nguồn của nó được công bố rộng rãi công khai và cho phép
mọi người tiếp tục phát triển phần mềm đó. Điều này không có nghĩa là
chúng có thể được sao chép, sửa chữa thoải mái hay sử dụng vào mục đích
nào cũng được. Mã nguồn mở được công bố dưới rất nhiều điều kiện khác
nhau (license), một số trong đó cho phép phát triển, sử dụng và bán tùy
ý miễn là giữ nguyên các dòng về nguồn gốc sản phẩm (BSDL), một số bắt
buộc tất các sản phẩm làm ra từ đó cũng phải là open-source (GPL), một
số khác đòi hỏi phải công bố trọn vẹn mã nguồn (Mozilla), một số khác
không cho phép sử dụng vào mục đích thương mại (Sun Solaris Source Code
License), một số khác lại không có ràng buộc gì đáng kể (public domain,
MIT X11 license) v.v. Qua đó ta thấy khái niệm open source không thể chuẩn
xác mà muốn nói đến tính pháp lý của việc sử dụng các phần mềm mã nguồn
mở, chúng ta phải xem xét đến điều kiện sử dụng (license) cụ thể mà dưới
đó chúng được công bố. Một điều kiện hay được áp dụng nhất là GPL: GNU
General Public License (http://www.fsf.org/licenses/gpl.html)
của tổ chức Free Software Foundation.
GPL license có 2 đặc điểm phân biệt, đó là:
- Tác giả gốc giữ bản quyền về phần mềm nhưng cho phép người dùng
rất nhiều quyền khác, trong đó có quyền tìm hiểu, phát triển, công
bố cũng như quyền khai thác thương mại sản phẩm.
- Tác giả sử dụng luật bản quyền để bảo đảm các quyền đó không bao
giờ bị vi phạm đối với tất cả mọi người, trên mọi phần mềm có sử dụng
mã nguồn của mình.
Đặc biệt điểm thứ 2 thường được gọi là hiệu ứng virus
(viral effect)vì nó biến tất cả các phần mềm có dùng mã nguồn GPL cũng
biến thành phần mềm GPL. Trên thực tế điều này có ý nghĩa: bất kỳ tác
giả nào sử dụng dù chỉ 1 phần rất nhỏ mã nguồn GPL trong chương trình
của mình cũng phải công bố chương trình đó dưới điều kiện GPL. Điều kiện
này quy định ví dụ:
- Mọi phần mềm GPL đều phải công bỗ mã nguồn của mình rộng rãi công
khai và phải tạo điều kiện cho mọi người truy cập được mã nguồn ấy
(ví dụ qua web hoặc qua việc bán CD giá rẻ)
- Giữ nguyên mọi dòng chú thích về nguồn gốc tác giả, bản quyền của
họ cũng như điều kiện được áp dụng đối với phần mềm (trong 1 file
có tên LICENSE)
- Cấm việc bán mã nguồn nhưng cho phép kinh doanh chương trình được
tạo ra từ mã nguồn ấy hoặc là các dịch vụ hỗ trợ liên quan.
(Sưu tầm) |