December 11, 2004

Về phần mềm, mã nguồn mở và vụ iCMS

Những ngày qua dư luận, báo chí và các diễn đàn tin học trong nước đặc biệt “nóng lên” với tin “sản phẩm iCMS của VinaCom chỉ là sản phẩm ăn cắp đi thi đoạt giải TTVN 2003”. Mặc dù đã có rất nhiều chứng cứ được đưa ra nhưng thông tin của các “phe” không chỉ rất khác nhau mà nhiều khi còn là hoàn toàn đối lập. Để các độc giả không phải người trong ngành có thể có một cái nhìn sâu sắc hơn về sự việc cũng như để rộng đường cho công luận, trong bài viết này tác giả đưa ra một cách nhìn toàn diện về bản chất của một sản phầm phần mềm cũng như giải thích các khái niệm được đề cập đến nhiều nhất như “mã nguồn mở” hay GPL và qua đó đính chính một số cách nhìn thiếu chuẩn xác hay còn phiến diện.

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 trước hết 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ĩ mà 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 lại 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à một 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 với 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. Chính 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©. 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.

Trở lại với phần mềm iCMS của VinaComm

Đến đây chúng ta có thể khẳng định: một phần mềm như iCMS chỉ được gọi là có tính sáng tạo khi các tác giả đã tự mình tìm ra kiến trúc, thiết kế, các giải thuật cũng như cấu trúc dữ liệu của chương trình. Vậy có thực iCMS là một giải pháp mang tính sáng tạo cao hay không và làm thế nào chúng ta có thể xác định được điều đó? Các con số về “giống đến 80%” hay “chỉ 30%”, thậm chí là “chỉ 10%” như các bên đã tung ra thực chất có ý nghĩa gì? Sau đây chúng ta sẽ thử tìm lời giải cho những câu hỏi đó.

Nhóm tác giả iCMS mà đại diện là Nguyễn Anh Tuấn trong thư xin lỗi được công bố trên báo chí và các diễn đàn ngày 3-12-2004 đã xác nhận phầm mềm iCMS của họ được xây dựng dựa trên nền tảng lý thuyết và chương trình mẫu (CMS.NET) trong quyển sách “Real World ASP.NET: Building a Content Management System”, tác giả Stephen R. G. Fraser, nhà xuất bản Apress , năm 2002. Hãy khoan bàn đến khía cạnh pháp lý của vấn đề này (quyển sách nói trên và toàn bộ mã nguồn trong đó được bảo vệ bởi luật bản quyền và luật về sở hữu trí tuệ), chúng ta hãy xác định xem thực chất của thông điệp trên là gì.

Phần mềm CMS.NET được giới thiệu trong quyển sách nói trên là một phần mềm hoàn chỉnh, hoạt động đáp ứng yêu cầu và có đầy đủ chức năng của một giải pháp quản lý nội dung/đăng bài (content management) phải có. Tác giả Fraser đã sử dụng nó làm giáo cụ trực quan để dậy từng bước về cách phát triển một hệ thống đăng bài/quản lý nội dung trên nền .NET của Microsoft và bản thân ông đã xếp mức độ phát triển của phần mềm này là “sản xuất ổn định” (Production State/Stable) khi đăng ký nó trên SourceForge . Nhóm iCMS đã copy toàn bộ phần mềm này để phát triển tiếp, bằng chứng là kể cả các phần không dùng đến (các ảnh), tên file, tên cấu trúc dữ liệu thậm chí là cả các lỗi của 2 phần mềm này giống hệt nhau đến từng chi tiết (duy nhất nhóm iCMS chỉ đổi tên CMSNET thành iCMS của mình mà thôi)! Nếu chỉ đơn thuần là học được từ trong sách (và các quyển sách khác) và tự viết chương trình của mình thì không khi nào lại có sự trùng lặp ở những tiểu tiết như vậy cả vì tên các biến hay tên file không có ý nghĩa gì đối với máy, chúng chỉ do người viết tự đặt ra mà thôi. Hơn nữa quá trình học luôn bao gồm hiểu và phát triển các ý có sẵn; ở đây nhóm iCMS đã bê nguyên cả lỗi trong phần mềm CMS.NET sang phần mềm của mình,vậy thì hoặc là họ chưa hiểu chương trình đến nơi đến chốn, hoặc là họ đơn giản sao chép lại! Trường hợp này làm người ta không khỏi nhớ đến các vụ sao chép bài, bị giáo viên phát hiện khi 2 bài giống nhau đến cả ở lỗi. Như vậy iCMS được sao chép ra từ CMS.NET (không loại trừ khả năng sau đó cải tiến phát triển tiếp), đó là khẳng định thứ nhất.

Thứ hai là cụm từ “nền tảng lý thuyết” trong trường hợp này có ý nghĩa thực sự là gì? Như đã trình bầy ở trên, phần nghiên cứu khoa học trong một giải pháp phần mềm bao gồm phân tích yêu cầu, xây dựng mô hình, lựa chọn kiến trúc, thiết kế và tìm giải pháp chi tiết. Tất cả các phần này đã có trong CMS.NET và được trình bày rất rõ ràng trong quyển sách của tác giả Fraser và sau đó được bê nguyên hầu như không thay đổi sang iCMS. Nếu tất cả đúng như tuyên bố của nhóm iCMS thì sau đó họ có thay đổi thiết kế cho phần giao diện sử dụng nhưng phần này cũng lại xuất phát từ 1 phần mềm có sẵn khác: Yahe.NET, thay đổi về quy trình đăng bài và thêm mới 2 chương trình là Spider (để copy bài từ các trang online khác) và offline-client (sử dụng không cần online liên tục). Các module còn lại đều được phát triển thêm sau này chứ chưa có vào thời điểm đi thi TTVN 2003 (vì khi đó chưa có yêu cầu của các khách hàng như báo CAND hay VTV). Như vậy chúng ta có thể khẳng định: giá trị sáng tạo trong phần nghiên cứu khoa học của giải pháp iCMS là không. Điều này thực ra rất dễ hiểu.

Bản thân vấn đề quản lý đăng bài (content management) đã được ngành CNTT đề cập đến từ lâu với rất nhiều giải pháp hoàn chỉnh như “PHP Nuke”, “Bricolage”, “Zope” v.v. Hầu hết các giải pháp nói trên đều ở dạng mã nguồn mở và mọi người đều có thể tham khảo, phát triển chúng tiếp tục. Điểm khác cơ bản với CMS.NET (và vì thế iCMS) là ở chỗ chúng dùng các framwork và thư viện khác như PHP, Perl, Python, MySQL mà không dùng .NET vốn chỉ chạy trên hệ điều hành Windows của Microsoft chiếm đến 99.9% thị trường Việt Nam. Vì vậy các phần mềm nói trên tuy rất nổi tiếng và hoàn chỉnh nhưng lại được biết đến rất ít ở trong nước. Tính sáng tạo chính của CMS.NET là ở chỗ trình bày một giải pháp sử dụng framework .NET vào việc quản lý đăng bài. iCMS tuyệt đối không đóng góp thêm được gì vào việc đổi mới này cả! Có chăng đó chỉ là việc sử dụng các linh kiện khác để thêm tính năng mới cho hệ thống này mà thôi. Qua đây chúng ta có thể thấy dẫu là 30% hay 80% theo kiểu so sánh từng dòng (line-by-line) giữa 2 phần mềm này sẽ cũng không làm thay đổi một khẳng định quan trọng, đó là: giải pháp iCMS không có tính sáng tạo, không có đóng góp về mặt nghiên cứu khoa học cho ngành CNTT nước nhà. Điều này có thể so sánh với hình ảnh một số nhà sản xuất TQ copy mẫu mã và thiết kế kỹ thuật của Honda rồi dùng các linh kiện khác để cho ra đời xe Wave “tầu” hay Dream “đểu” mà đôi khi cũng có thêm các chức năng mới kiểu kêu “bim bíp” khi bật đèn xi-nhan!

Cuộc thi TTVN có một cái “tít” rất kêu: chỉ cần một ý tưởng. Đáng buồn thay, đến ngay cả ý tưởng nhóm iCMS cũng không có vì như họ đã thú nhận: trước khi đọc quyển sách của tác giả Fraser họ cũng đã tự viết 1 phần mềm CMS nhưng sau đó vứt bỏ để theo hoàn toàn ý tưởng của tác giả Fraser. Đến đây chúng ta có thể phần nào hiểu được sự phẫn nộ của cộng đồng tin học Việt Nam đối với việc iCMS đoạt cúp vàng “Trí Tuệ Việt Nam” và cảm thông với những dòng chua sót của các bạn trẻ khi thấy “trí tuệ việt nam chỉ là khôn vặt”.

Mã nguồn mở, GPL và tính pháp lý của iCMS

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) 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 của tổ chức Free Software Foundation.

GPL license có 2 đặc điểm phân biệt, đó là:
1. 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.
2. 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 điểm thứ 2 thường được gọi là đặc điểm virus (viral effect) vì chúng 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 GPL quy định:
• 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.

Áp dụng vào trường hợp của iCMS các điều đó có nghĩa là: nếu iCMS có sử dụng dù chỉ 1 dòng mã nguồn dưới điều khoản GPL thì VinaComm buộc phải công bố toàn bộ mã nguồn của iCMS công khai (điều mà VinaComm không làm) cũng như bắt buộc phải giữ trọn vẹn các dòng về bản quyền tác giả (điều mà VinaComm đã cố tình xóa hoặc thay đổi). Vi phạm các điều này dẫn đến việc VinaComm mất toàn bộ quyền về mã nguồn đã sử dụng và các sản phẩm từ đó làm ra (iCMS) tự động trở thành không có bản quyền và việc sử dụng hay kinh doanh chúng đều là bất hợp pháp! VinaComm và tất cả khách hàng đã mua sản phẩm iCMS có thể bị kiện bởi tác giả gốc dựa trên luật bản quyền vì công ước Bern đã được áp dụng tại Việt Nam. Điều này không chỉ là một mối đe dọa lớn về tài chính mà còn là vấn đề chính trị và thể diện quốc gia khi các cơ quan ngôn luận như VTV hay báo CAND đều sử dụng phần mềm iCMS. Công ty Sitecom của Đức là một trường hợp điển hình gần đây nhất do vi phạm điều kiện GPL (có sử dụng phần mềm Netfilter/iptables nhưng không công bố mã nguồn) nên đã bị tuyên án bởi tòa án bang Munic Đức.

Khác với điều kiện của GPL là điều kiện theo Quyền tác giả được áp dụng với toàn bộ quyển sách của tác giả Fraser, trong đó quy định rõ tác giả và NXB giữ toàn bộ quyền về tác phẩm (exclusive right), đặc biệt là quyền sao chép và quyền khai thác thương mại đối với tác phẩm và mọi sản phẩm được làm ra từ tác phẩm đó. Rõ ràng là điều kiện quyền tác giả được quy định ngặt nghèo hơn rất nhiều và theo điều kiện này thì dù iCMS có copy chỉ 10% mã từ phần mềm CMS.NET trong sách thì việc sử dụng và khai thác thương mại nó vẫn là bất hợp pháp!

Tài liệu tham khảo

So sánh mã nguồn iCMS và CMS.NET
Thông cáo báo chí của nhóm iCMS về nguồn gốc sản phẩm
Thông cáo chính thức của tác giả Fraser về việc ăn cắp mã nguồn CMS.NET
Tranh luận trên diễn đàn về các bằng chứng vi phạm của iCMS
Chất vấn và trả lời của nhóm iCMS trước cộng đồng
Từ điển bách khoa toàn thư Wikipedia
Tài liệu về GPL và Free Software Foundation

Về tác giả: là kỹ sư tin học (Diplom Informatiker) được đào tạo tại CHLB Đức với hơn 15 năm kinh nghiệm trong lĩnh vực lập trình, thiết kế phần mềm ông là người cổ động và tích cực tham gia vào phong trào phát triển phần mềm mã nguồn mở trong cũng như ngoài nước.

1 comment:

Anonymous said...

Well done but a bit too long, might you? The passage about TQ producent is delicious but I doubt any press would dare to print it!
Anyway good job!