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[1].

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.

Xem tiếp tại http://wiki.oxus.net/User:Sinuhe

[/SIZE]