Blog của Lê Văn Luật

Đời người thì có hạn mà sự học thì vô hạn!

Phần mềm mã nguồn mở (Open source)

Một hướng phát triển phần mềm trên toàn thế giới hiện nay là Phần mềm mã nguồn mở. Đây cũng là một hướng phát triển CNPM trong nước. Hiện nay Việt Nam cũng đang tập trung vào hướng phát triển phần mềm nguồn mở (PMNM). Tuy nhiên điều này vẫn chưa phổ biến và nói chung khái niệm PMNM cũng còn khá xa lạ ngay cả với nhiều lập trình viên. Trong bài này tôi cố gắng trình bày sơ lược về khái niệm này nhằm giúp các bạn hiểu qua về PMNM.

Phần mềm

Phần mềm (Software) là khái niệm mà chúng ta đã sử dụng rất nhiều nhưng thế nào là phần mềm? Tạo ra nó bằng cái gì?

Các bạn đã biết rằng bộ não của máy tính là vi xử lý (Micro-processor), mọi thao tác tính toán, xử lý đều phải chuyển vào vi xử lý.

Để “yêu cầu” vi xử lý thực hiện một thao tác nào đó, bạn phải gửi cho vi xử lý một lệnh. Mỗi vi xử lý được thiết kế để thực hiện một số thao tác cơ bản. Để giải quyết một bài toán bạn sẽ phải sắp xếp các lệnh theo một thứ tự nào đó (đây là quá trình tìm thuật toán hay thuật giải). Điều đáng buồn là vi xử lý chỉ nhận các lệnh dưới dạng mã số gọi là mã lệnh (Instruction code) hay mã máy (Machine code). Nếu lập trình bằng các con số như thế thì thật khủng khiếp vì bạn phải nhớ số nào làm việc gì!!!

Để dễ lập trình với vi xử lý, người ta đặt cho mỗi lệnh máy một chữ tiếng Anh viết tắt. Các lệnh dạng chữ tiếng Anh viết tắt gọi là lệnh máy gợi nhớ (Mnemonic instruction). Các lệnh máy gợi nhớ này được gọi chung là Hợp ngữ (Assembly language). Khi muốn viết chương trình, bạn sẽ viết dưới dạng hợp ngữ, sau đó dùng một chương trình đặc biệt chuyển đổi các lệnh hợp ngữ (dạng chữ) thành các mã máy tương ứng. Quá trình chuyển đổi này gọi là dịch (giống như dịch từ tiếng Anh sang tiếng Việt!!!).

Nhờ có hợp ngữ mà việc lập trình với máy tính đã đơn giản hơn rất nhiều. Tuy nhiên, hợp ngữ hoàn toàn chỉ thể hiện cách hoạt động của máy tính, do đó nếu muốn thể hiện ý tưởng của con người bằng hợp ngữ thì rất khó khăn. Vì lý do này người ta gộp một số mã máy lại để nó thực hiện một thao tác thân thiện với con người và đặt cho nó dạng câu nói gần gũi với con người (như Nếu … thì … ngược lại thì …). Lập trình bằng lệnh cao cấp này dễ dàng hơn rất nhiều. Các lệnh lập trình dưới dạng gần gũi với con người này được gọi là ngôn ngữ lập trình bậc cao (High-level programming language).

Sau đây là ví dụ chương trình nhận hai số nào đó và cho biết tổng của chúng là bao nhiêu viết bằng ngôn ngữ lập trình pascal (phần này được gọi là mã nguồn của chương trình):

Var
a, b : real;

Begin

Write( “Nhập số thứ nhất: ” );
Readln( a );
Write( “Nhập số thứ hai: ” );
Readln( b );
Writeln( “Tổng của hai số= ”, a + b );

End.

Sau khi viết chương trình dưới dạng ngôn ngữ lập trình bậc cao, bạn sẽ thực hiện thao tác dịch nó sang dạng mã máy để máy tính có thể hiểu được.

Đoạn đầu của chương trình trên dưới dạng mã máy (dịch bằng Borland Pascal 7.0):

mamay

Bạn có thể thấy rằng: nhìn vào chương trình dạng mã máy (hay còn gọi là dạng nhị phân) bạn không thể hiểu gì cả, không biết nó làm gì, không thể sửa nó. Nếu bạn có mã nguồn của chương trình (trong ví dụ này là viết bằng Pascal) thì bạn có thể sửa đổi, thêm bớt tùy ý sau đó dịch lại thành chương trình nhị phân mới.

Các phần mềm thường viết dưới dạng ngôn ngữ bậc cao sau đó dịch ra thành dạng nhị phân rồi phân phối (Distribute) cho người sử dụng. Có rất nhiều ngôn ngữ lập trình bậc cao, mỗi ngôn ngữ này có những đặc điểm riêng và phù hợp với một số lĩnh vực riêng (ví dụ: Pascal phù hợp với dạy về lập trình cổ điển, Eiffel phù hợp cho dạy lập trình trí tuệ nhân tạo, Prolog, Adda cho lập trình trí tuệ nhân tạo, Fortran cho lập trình tính toán,…, C, C++ cho lập trình ứng dụng nói chung,… trong đó C là ngôn ngữ thông dụng nhất để tạo các phần mềm trên Linux, Unix).

Tóm lại:

Các chương trình luôn được viết dưới dạng ngôn ngữ lập trình bậc cao. Văn bản chương trình (các chữ, câu lệnh dưới dạng ngôn ngữ lập trình bậc cao) được gọi là mã nguồn (Source code).

Muốn tạo thành chương trình thực sự có thể sử dụng được ta phải dùng các trình dịch để chuyển đổi (dịch) mã nguồn thành mã nhị phân (Binary code).

Nếu có mã nguồn của một chương trình nào đó, ta có thể sửa đổi, thêm, bớt tính năng tùy thích. Sau khi sửa đổi ta phải dịch lại để tạo ra các chương trình nhị phân mới sau đó mới có thể đem ra sử dụng.

Các loại phần mềm và Phần mềm nguồn mở

Xét trên khía cạnh phân phối (distribute) phần mềm có một số dạng sau:

  • Phần mềm thương mại (Commercial software): chỉ phân phối dưới dạng nhị phân (không công bố mã nguồn – nguồn đóng). Hầu như tất cả các phần mềm cho Windows đều là phần mềm thương mại. Các phần mềm thương mại luôn đăng ký bảo vệ bản quyền (Copyright). Người phát triển (tạo ra) phần mềm không cho phép bất kỳ ai khác chỉnh sửa, thay đổi chương trình, cấm mọi hình thức ăn cắp mã nguồn, lấy nguyên lý hoạt động,… để tạo ra các phần mềm khác. Người sử dụng mua phần mềm để sử dụng (mua quyền sử dụng) hợp pháp được cấp giấy phép sử dụng – License (chứ không phải bản quyền như chúng ta thường nói). Tùy theo loại hình mua và loại phần mềm mà giấy phép có các loại khác nhau. Với người dùng gia đình thì giấy phép thường chỉ cho phép 01 máy sử dụng phần mềm. Với các dạng phần mềm mạng, nhóm thì thường phải mua một bản chính với giá cao sau đó mua thêm các bản cho các máy khác với giá thấp hơn… Một số công ty lớn có thể mua lại bản quyền một phần mềm nào đó, ví dụ Microsoft đã mua bản quyền phần mềm FoxBase và phát triển thành Foxpro. Mua bản quyền bao gồm: mua thương hiệu phần mềm (Trade mark), mua mã nguồn, chuyển giao công nghệ liên quan. Sau khi đã mua bản quyền phần mềm thì công ty cũ (người xây dựng ban đầu) không còn quyền hạn gì với phần mềm đó nữa. nếu muốn sử dụng các bản từ thời điểm chuyển giao bản quyền về sau thì công ty cũ này vẫn phải mua quyền sử dụng như người dùng bình thường (mua bản quyền chi phí rất đắt, trong khi mua quyền sử dụng rẻ hơn nhiều).
  • Phần mềm chia sẻ (Shareware): cũng chỉ phân phối dưới dạng mã nhị phân (nguồn đóng). Miễn phí nhưng trong một số trường hợp đặc biệt thì phải trả tiền.
  • Phần mềm phi thương mại (Non-commercial software): phân phối dưới dạng mã nhị phân (nguồn đóng), miễn phí nhưng không cho phép sử dụng nó cho các hoạt động thương mại.
  • Phần mềm miễn phí (Freeware): nguồn đóng, miễn phí hoàn toàn.
  • Phần mềm nguồn mở (OSS): phân phối dưới dạng mã nhị phân và cả mã nguồn. Có thể tính phí cũng có thể không.

Có ba dạng nguồn mở như sau:

  1. Kiểu BSD: cho phép lấy mã nguồn, chỉnh sửa nhưng không được đưa phần đã chỉnh sửa ngược trở lại thư việc nguồn ban đầu.
  2. Kiểu Apache: cho phép lấy mã nguồn, chỉnh sửa và đưa lại thư viện mã nguồn ban đầu.
  3. Kiểu GNU: cho phép lấy mã nguồn, chỉnh sửa và đưa lại thư viện mã nguồn ban đầu. Điểm quan trọng của GNU là dựa trên mã nguồn của một phần mềm theo GNU để tạo phần mềm khác thì phần mềm mới bắt buộc phải theo GNU (tức nguồn mở, được quyền sao chép, sửa chữa,… chỉ được tính phí phát hành, quảng cáo, hỗ trợ kỹ thuật không được tính “công” làm ra phần mềm – điều này gọi là Copyleft với nghĩa trái lại với phần mềm thương mại có Copyright).

Cần lưu ý một vài điểm như sau:

Microsoft Windows là một Hệ điều hành thương mại nguồn đóng nhưng trên nó có thể có các phần mềm nguồn mở.

Linux là hệ điều hành nguồn mở theo GNU GPL nhưng trên nó có thể có các phần mềm nguồn đóng và thương mại (không theo GNU). Các phần mềm này phải tự xây dựng từ đầu đến cuối, không được lấy bất cứ tí gì trong mã nguồn mở của các phần mềm theo GNU GPL.

Xu hướng phát triển phần mềm nguồn mở

Hiện nay, do nhiều đặc điểm, nên phần mềm nguồn mở đang dần trở thành một hướng phát triển rất mạnh trong cộng đồng IT nói chung. Có thể kể ra vài đặc đểm nổi bật như sau:

Sự phát triển về ý thức của con người: ngày càng có nhiều người muốn đóng góp cho xã hội những gì mình có thể làm được mà không đòi hỏi xã hội phải trả công cho họ.

Sự phát triển của IT nói chung và Internet nói riêng: sự phát triển của công nghệ thông tin và công nghệ viễn thông làm cho thế giới như một ngôi nhà nhỏ mà mọi người có thể trao đổi với nhau, làm việc cùng nhau không kể thời gian, địa điểm. Cùng với Internet, ngày càng có nhiều người tham gia được vào các dự án phần mềm nguồn mở (trước khi Internet phát triển, nếu có những dự án này thì cũng khó có thể có nhiều người tham gia).

Sử dụng phần mềm nguồn mở sẽ không bị phụ thuộc vào công nghệ riêng của bất kỳ hãng nào, do đó, khi một hãng nào đó thay đổi công nghệ (hay bị phá sản!!!) thì cũng không ảnh hưởng trực tiếp hoặc nếu có thì cũng rất ít đến hoạt động của ta.

Phần mềm nguồn mở được nhiều người cùng tham gia thiết kế nên tính ổn định cao ngoài ra, khi có lỗi (do nguồn mở) nên sẽ được phát hiện ngay và sửa chữa kịp thời.

Giá cả (tổng chi phí sở hữu – TCO) của phần mềm nguồn mở thấp hơn nhiều so với phần mềm thương mại.

Tuy nhiên, phần mềm nguồn mở cũng có những nhược điểm (có thể nói rất nhỏ):

  • Đa số các phần mềm nguồn mở đều chỉ mới phát triển nên có một số tính năng của chúng còn kém so với một số phần mềm thương mại khác (tương lai sẽ khác!).
  • Do phạm vi rộng lớn của phần mềm nguồn mở nên việc phát triển loại phần mềm này khó có thể có tính đột biến (bạn thấy rằng công nghệ mới nào đó rất tuyệt vời, nhưng để thay đổi bạn phải thuyết phục cả cộng đồng, nếu không chỉ một mình bạn dùng công nghệ đó!!!).
  • Hỗ trợ kỹ thuật cho các phần mềm nguồn mở thường kém hơn các phần mềm thương mại.
  • Khả năng thích ứng với thị trường (về giao diện,…) của phần mềm nguồn mở thường kém hơn phần mềm thương mại (tương lai có thể sẽ khác).

Với những gì trình bày trên đây, bạn có thể thấy rằng phần mềm nguồn mở là một hướng phát triển rất quan trọng trong ngành CNTT. Việt Nam cũng đã đánh giá được tầm quan trọng của vấn đề này và đang định hướng phát triển Linux (HĐH nguồn mở theo GNU GPL).

Các tổ chức liên quan đến phần mềm nguồn mở (OSS)

Có hai tổ chức lớn nhất liên quan đến phần mềm nguồn mở:

  • GNU (GNU is Not Unix): thành lập năm 1984 (xem bài giới thiệu Linux) với mục đích xây dựng một hệ điều hành như Unix nhưng miễn phí mãi mãi (website: http://www.gnu.org).
  • FSF (Free Software Foundation): thành lập để hỗ trợ cho GNU (website: http://www.fsf.org)

LVL

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Information

This entry was posted on 24/12/2012 by in Công nghệ thông tin.

Điều hướng

%d bloggers like this: