Những cân nhắc khi xây dựng một phần mềm nguồn mở

Sunday, April 5, 2009 0 phản hồi

Phần mềm nguồn mở đang là một xu hướng phát triển trong những thập niên gần đây. Tuy nhiên việc xây dựng phần mềm nguồn mở có nhiều khó khăn đòi hỏi bạn phải suy nghĩ thật kĩ trước khi bắt tay vào hiện thực. Trước đây, tôi có cơ hội làm việc với một số nhóm phát triền mã nguồn mở (phần lớn là do tôi tự thành lập hoặc tham gia part time như một thành viên phát triển). Có một vài kinh nghiệm tôi muốn chia sẻ với các bạn.

Trong bài viết này, tôi liệt kê những điều bạn cần cân nhắc trong bước đầu tiên xây dựng phần mềm nguồn mở:
(Từ phần mềm trong bài này để chỉ chung các sản phẩm/ thư viện/ tiện ích)

Mục tiêu của phần mềm

Sự ra đời của một phần mềm phải giải quyết được bài toán/ vấn đề trong thực tế. Hãy xem xét đánh giá những giải pháp tồn tại trên thị trường để xác định lý do tồn tại phần mềm của bạn. Nếu không xác định chính xác mục tiêu, phần mềm của bạn rất dễ bị "đào thải" trong quá trình phát triển. Dưới đây là một số mục tiêu mà tôi cho rằng dễ làm bạn bị thất bại:

1. Trên thị trường đã có phần mềm tương tự, tuy nhiên nó không "mở" để cho tôi phát triển tiếp. => Cẩn thận, để chiến thắng được đối thủ - bạn phải làm tốt hơn họ. Nếu chọn mục tiêu này, bạn phải chạy đua với đối thủ đã vượt qua mặt bạn khá xa - nếu bạn phải xây lại từ đầu.

2. Tôi muốn xây dựng một giải pháp của riêng tôi để không bị phụ thuộc vào những phần mềm khác. => Nhu cầu nghiệp vụ của bạn có đủ lớn về giá trị kinh tế để phải suy nghĩ về mục tiêu này? Google có thể bỏ ra 5-10 triệu USD xây dựng lại cái bánh xe để đáp ứng được mục tiêu kinh doanh. Tuy nhiên, bạn có lớn như google? Hãy thử so sánh chi phí giữa việc xây dựng từ đầu và mua phần mềm xem nó có sự chênh lệch quá lớn hay không trước khi đi tiếp.

3. Tôi xây dựng phần mềm này để cống hiến cho cộng đồng => Ít ai có thể sống được bằng niềm tin và đam mê. Liệu đội ngũ phát triển của bạn có thể đi tiếp nếu họ không có đủ "thực" để vực được "đạo".

...

Lợi nhuận từ phần mềm


Không ai có thể phủ nhận được kinh tế là điều cốt lõi của cuộc sống. Phát triển phần mềm không thể tồn tại nếu không có nguồn đầu tư và lợi nhuận.
Hãy đặt cho mình 2 câu hỏi lớn cho cân nhắc này:
1/ Ai sẽ đầu tư cho phần mềm?
2/ Những cách để kiếm tiền từ phần mềm?

Giấy phép bản quyền

Trong cộng đồng nguồn mở, giấy phép bản quyền (license) là một yếu tố rất quan trọng. Nó chính là giấy thông hành để giúp bạn phân phối, kinh doanh, tìm kiếm cộng đồng đóng góp cho phần mềm.

Bạn cũng có thể tạo ra một license của riêng bạn. Tuy nhiên nên tham khảo một số license phổ biến trước khi quyết định.

Đây là link liệt kê các license mã nguồn mở mà bạn có thể tham khảo.

Những license phổ biến 1
Những license phổ biến 2
So sánh đặc điểm của một số license phổ biến

Những thư viện cần sử dụng

Ngày nay, không ai đi xây một căn nhà bắt đầu từ việc sản xuất xi măng, gạch và vữa. Phần mềm cũng vậy. Hãy lựa chọn những thư viện, công nghệ cần thiết cho phần mềm của bạn để giảm đi chi phí phát triển.

Một điều lưu ý là: nếu thư viện bạn dùng là mã nguồn mở - hãy xem xét xem license của nó có mâu thuẫn với license mà bạn đang chọn hay không? Trước đây khi làm một dự án với một trong những hãng viễn thông hàng đầu của Nhật, tôi ngạc nhiên khi thấy họ lựa chọn rất cẩn thận những thư viện trong quá trình phát triển. Tôi và một người bạn đồng nghiệp phải viết lại từ đầu một thư viện taglib gần giống như DisplayTag (một thư viện rất nổi tiếng để hiển thị lưới dữ liệu trên web của Java) - chỉ vì một lý do đơn giản: license của nó là GPL. Đây là license không phù hợp với tôn chỉ của họ.

Đường hướng phát triển của phần mềm (Roadmap)

Đường hướng phát triển là một trong những yếu tố quan trọng để bạn định hướng cho phần mềm. Nó giúp bạn:
+ Giữ cho phần mềm của mình không đi lệch mục tiêu so với ban đầu.
+ Giúp cho đội ngũ phát triển biết được mình cần làm gì để đạt được mục tiêu.
+ Đối tượng sử dụng phần mềm đánh giá đúng để lựa chọn sản phẩm
+ Tạo ra niềm tin và kì vọng cho đối tượng sử dụng phần mềm
Đường hướng phát triển của phần mềm không nên được ấn định cứng nhắc ngay từ thời điểm ban đầu. Nó nên được cập nhật sau mỗi phiên bản phát hành từ những ý kiến và đóng góp của cộng đồng.

Đội ngũ phát triển


Có 3 nhóm đối tượng chính của đội ngũ phát triển phần mềm nguồn mở

1/ Nhóm phát triển chính: là những người đóng góp chính cho phần mềm
2/ Lập trình viên tự do: là những người tham gia đóng góp những sửa đổi nhỏ, không thường xuyên qua các dạng phản hồi hoặc các tiện ích liên quan.
3/ Người dùng phần mềm: người dùng phần mềm cũng được xem là đối tượng của đội ngũ phát triển. Họ đóng góp cho phần mềm thông qua những phản hồi, báo lỗi, yêu cầu cải tiến, ...

Một phần mềm nguồn mở nên được phát triển bởi một đội ngũ phát triển chính có tâm huyết và cùng chí hướng. Vì vậy, người trưởng nhóm cần lựa chọn cẩn thận những thành viên phù hợp trước khi bắt tay xây dựng.

Công cụ và môi trường phát triển


Dưới đây là một số yếu tố liên quan đến công cụ và môi trường phát triển cần được cân nhắc trong quá trình phát triền phần mềm nguồn mở:

+ Công cụ quản lý phiên bản (SVN và CVS là 2 công cụ được ưa chuộng nhất hiện này)
+ Forum để trao đổi, thảo luận giữa nhóm phát triển và cộng đồng, hoặc giữa các thành viên của nhóm
+ Wiki: được dùng như nơi để ghi nhận các khái niệm, hướng dẫn sử dụng, tài liệu kĩ thuật được công bố.
+ Bug/issue tracker: công cụ để quản lý các bug/issue diễn ra trong quá trình phát triển. Yêu cầu/ phản hồi/ task cũng được xem xét như là một issue trên công cụ này.

Phương pháp luận và quy trình phát triển

Đây là yếu tố quy định linh hồn của việc phát triển phần mềm. Mỗi nhóm phát triển có thể chọn cho mình một phương pháp luận riêng. Tuy nhiên các phương pháp luận trong trường phái Agile rất được ưa chuộng trong giới phát triển nguồn mở.
2 best practice trong Agile thường được áp dụng là

1/ Tích hợp liên tục
2/ Test first

Tôi sẽ chia sẻ với các bạn nhiều hơn về phần mềm nguồn mở trong những bài viết sau.

Mục tiêu và hệ quả

0 phản hồi

Xét những câu dưới đây:
(1) Tôi muốn đạt đến đỉnh cao của nghề nghiệp mà tôi đang theo đuổi
(2) Tôi muốn đạt được doanh số ngày càng nhiều hơn
(3) Tôi muốn yêu và được yêu trọn vẹn.

(4) Tôi muốn trở thành người giàu có.
(5) Tôi muốn hạnh phúc.
(6) Tôi muốn trở thành người nổi tiếng.

(1) (2) (3) là mục tiêu. (4) (5) (6) là hệ quả. Thực sự, giàu có, hạnh phúc, nổi tiếng chẳng qua chỉ là kết quả từ việc đạt được những mục tiêu ta đặt ra trong cuộc sống.
Không có mục tiêu thì không thể có hệ quả.

Nếu nhận được câu hỏi: mục tiêu của anh là gì trong 10 năm nữa?
và câu trả lời của bạn là: tôi muốn trở thành người giàu có.

=> bạn chưa có mục tiêu thực sự nào cả.