Thứ Năm, 24 tháng 5, 2012

Phát triển phần mềm tự do nguồn mở - Ngược lên dòng trên để về đích sớm


NHỮNG BÀI HỌC TỪ THỰC TIỄN
Cho tới bây giờ, hầu hết các công ty, tổ chức có liên quan tới việc phát triển phần mềm tự do nguồn mở (PMTDNM) tại Việt Nam đều thực hiện việc phát triển, tùy biến các PMTDNM có nguồn gốc của thế giới, dựa vào kho mã nguồn của thế giới, mà cụ thể hơn là dựa vào các kho mã nguồn PMTDNM của một cộng đồng, do một quỹ và/hoặc (các) công ty có trách nhiệm duy trì một PMTDNM cụ thể nào đó.
Trong quá trình tùy biến và/hoặc phát triển dựa vào các kho mã nguồn được nhập vào từ bên ngoài, các công ty, tổ chức phát triển các PMTDNM tại Việt Nam thường gặp phải một số khó khăn trong việc duy trì, nâng cấp và đồng bộ kho mã nguồn của riêng mình tạo ra khi tùy biến và hoặc bổ sung thêm mới (các) chức năng cho PMTDNM gốc ban đầu. Một trong những lý do cơ bản tạo ra những khó khăn đó nằm ở chỗ các công ty, tổ chức phát triển đã không đóng góp các mã nguồn tùy biến của mình trở ngược lại về dự án gốc ban đầu, tạo ra những khác biệt ngày càng lớn, ngày càng xa về tính năng và/hoặc tiêu chuẩn của PMTDNM dẫn xuất của chính công ty, tổ chức mình so với PMTDNM gốc ban đầu. Tới lượt chúng, theo thời gian, sự khác biệt này tạo ra những khó khăn cho chính các công ty, tổ chức phát triển mà trong một số trường hợp là rất khó và/hoặc không còn có khả năng để tích hợp kho mã nguồn của PMTDNM dẫn xuất của riêng công ty, tổ chức phát triển với kho mã nguồn của PMTDNM gốc ban đầu được nữa.
Một vài ví dụ điển hình cho việc này như:
  • Khi bạn phát triển một trình điều khiển thiết bị cho nhân Linux mà không có đóng góp mã nguồn của bạn ngược trở lại cho dự án phát triển nhân Linux của thế giới, thì cứ mỗi lần có phiên bản nhân Linux mới phát hành thì bạn có thể phải viết lại hoàn toàn và/hoặc sửa lại nhiều đống mã nguồn mà bạn đã viết và đã chạy được tốt với phiên bản nhân cũ. Vì nhân Linux hiện nay cứ khoảng 70 ngày lại có một phiên bản nhân mới được phát hành, nên có thể chính lý do này làm nản lòng bạn khi liên tục phải viết lại và/hoặc sửa lại đống mã nguồn của trình điều khiển thiết bị mà bạn viết cho nhân Linux.
  • Khi bạn phát triển một module có tính địa phương của quốc gia bạn, ví dụ như bộ gõ tiếng Việt, mà không có đóng góp mã nguồn của module đó ngược trở lại cho cộng đồng, công ty và hoặc quỹ có trách nhiệm duy trì phát tán gốc ban đầu mà bạn và cộng đồng địa phương sử dụng hàng ngày, ví dụ như Ubuntu hay Fedora chẳng hạn. Nhiều công ty, tổ chức của Việt Nam chúng ta chắc còn chưa quên khi từng phải tích hợp module bộ gõ tiếng Việt của mình mỗi khi có phiên bản mới của các phát tán như Ubuntu, Fedora được phát hành vài năm về trước.
  • Khi bạn tiến hành công việc bản địa hóa cho các ứng dụng, tiện ích PMTDNM, ví dụ cụ thể như OpenOffice, LibreOffice, GNOME, KDE, Mozilla Firefox... mà không đóng góp các bản dịch đó ngược trở lại về từng dự án gốc có xuất xứ từ bên ngoài đó, thì có khả năng mỗi lần có phiên bản mới, bạn sẽ phải dịch lại từ đầu, hoặc tệ hơn nữa, là không có luôn ngôn ngữ của quốc gia bạn.
  • Nói rộng ra, khi bạn tiến hành phát triển bất kỳ PMTDNM nào mà không có đóng góp trở ngược lại cho cộng đồng, chắc chắn bạn sẽ gặp khó khăn lớn cho chính sản phẩm dẫn xuất mà bạn đang dựa vào PMTDNM gốc để phát triển.
GIỚI THIỆU VỀ NGƯỢC LÊN DÒNG TRÊN
Ngược lên dòng trên là một khái niệm được sử dụng để mô tả qui trình đóng góp những sửa đổi mã nguồn trong nội bộ trở ngược lại cho một dự án nguồn mở, với mục tiêu để chúng được chấp nhận và được phân phối trong các phát hành trong tương lai của dự án. Nội dung của bài này đưa ra qui trình ngược lên dòng trên, những lợi ích cho tất cả các bên có liên quan (các công ty, các dự án, hệ sinh thái nguồn mở), và nhấn mạnh tới một số thực tiễn tốt nhất để đi theo.
Ngược lên dòng trên là một khía cạnh cơ bản của qui trình phát triển nguồn mở. Trong nguồn mở, điều này thường được sử dụng để mô tả qui trình nơi mà một cá nhân hoặc một công ty sửa đổi mã nguồn của một dự án nguồn mở cho phù hợp với một nhu cầu cụ thể, và sau đó đóng góp những sửa đổi của họ trở ngược lại cho dự án.
PMTDNM đang ngày càng được tích hợp vào trong các sản phẩm thương mại, được dẫn dắt bằng giá trị kỹ thuật, khả năng tăng tốc sự phát triển, hoặc để cải thiện thời gian đi tới thị trường. Kết quả là, nhiều công ty cũng đang tùy biến, sửa đổi PMTDNM để đáp ứng được những yêu cầu của các khách hàng. Các tổ chức phát triển mà còn chưa ôm lấy một cách đầy đủ sự tham gia tập thể của nguồn mở có thể duy trì những nhánh nội bộ riêng rẽ của những dự án đó, vì nó có thể là một cách dễ dàng để bắt đầu khi tiêu dùng PMTDNM.
Trong khi các cây phát triển trong nội bộ một cách riêng rẽ có thể là bước khởi đầu cho sự phát triển của một sản phẩm hoặc để chứng minh khái niệm, thì sự duy trì dài hạn có thể nhanh chóng trở thành đắt giá. Điều này đặc biệt đúng nếu PMTDNM sẽ được cập nhật thông qua vòng đời của sản phẩm, khi mã nguồn tùy biến sẽ cần phải được thích nghi với những thay đổi trong dự án nguồn mở dòng chính. Vì các lập trình viên trong các dự án nguồn mở có thể nhận thức được về những sửa đổi đang được thực hiện cho mã nguồn được phát hành của họ đằng sau những cánh cửa đóng, thì sẽ không có sự đảm bảo nào rằng sự phát triển thường lệ sẽ không phá vỡ các dẫn xuất nội bộ của mã nguồn đó.
Để nhận thức được đầy đủ những lợi ích của việc tiêu dùng PMTDNM, nhiều công ty đang chọn đi theo một triết lý “ngược lên dòng trên trước”. Điều này có nghĩa rằng những sửa đổi nội bộ sẽ được đánh giá để được chấp nhận đưa vào trong cây phát triển chính.
Bài viết này mô tả một qui trình điển hình cho việc ngược lên dòng trên cho mã nguồn nội bộ, trình bày những lợi ích của ngược lên dòng trên và đưa ra chỉ dẫn thực tế và những thực tiễn tốt nhất.
QUI TRÌNH NGƯỢC LÊN DÒNG TRÊN
Ngược lên dòng trên là qui trình đóng góp mã nguồn được phát triển một cách độc lập hoặc nội bộ trở ngược lại cho dự án nguồn mở gốc ban đầu, với mục tiêu làm cho nó được tích hợp vào trong cây phát triển chính của dự án nguồn mở. Trong khi từng dự án nguồn mở có tập hợp các qui trình và các tiêu chí chấp nhận của riêng mình, thì việc tuân theo qui trình chung được minh họa trong Hình 1 có thể cải thiện được khả năng rằng sự đóng góp của bạn sẽ được đánh giá hoặc có thể được chấp nhận trong một cây phát triển chính của dự án nguồn mở.
Hình 1: Qui trình điển hình cho việc xác định và ngược lên dòng trên cho mã nguồn nội bộ.
Qui trình được bắt đầu trong một tổ chức phát triển bằng việc giành được sự phê chuẩn nội bộ để đóng góp những sửa đổi trở ngược lại cho dự án bằng việc tuân thủ các chính sách và thủ tục nguồn mở của công ty. Tiếp sau, hãy xác định những sửa đổi nội bộ đang được thực hiện cho PMTDNM mà có thể được đệ trình trở ngược lại cho dự án, và xác định những sửa đổi nào là những ứng viên phù hợp cho việc ngược lên dòng trên. Khi mã nguồn tương ứng đã được xác định, hãy lên kế hoạch cho một chiến lược đệ trình, đặc biệt nếu mã nguồn là một đệ trình lớn, là phức tạp, hoặc có một tác động chủ chốt lên dự án. Mục tiêu là để tránh việc lấn át người duy trì của dự án và những người tham gia dự án với một đệ trình lớn mà là khó để hiểu, kiểm thử và/hoặc tích hợp.
Tiếp theo, hãy đảm bảo không có những phụ thuộc vào mã nguồn riêng, nội bộ. Nếu có, thì chúng phải được giải quyết trước khi có việc đệ trình mã nguồn cho dự án. Hơn nữa, hãy chắc chắn rằng những sửa đổi không tình cờ tạo ra bất kỳ rủi ro nào về an ninh hoặc phá vỡ mã nguồn khác.
Hãy chuẩn bị mã nguồn để đệ trình, đảm bảo rằng nó sử dụng kiểu dạng bản vá và lập trình của dự án, và hãy kiểm tra tính hợp lệ mà nó áp dụng một cách sạch sẽ đối với cây mã nguồn của dự án. Hãy tách bạch mã nguồn trong các phần logic nhỏ nhất có thể, như với bất kỳ sự đóng góp nguồn mở nào khác, và sau đó tuân theo qui trình đệ trình của dự án.
Sự đệ trình thường bắt đầu với một thảo luận trong danh sách thư của dự án. Hãy đề xuất các đóng góp, hỏi về những khuyến cáo, trả lời những câu hỏi, và đánh giá khả năng được chấp nhận từ những câu trả lời. Nếu sự tích hợp là phức tạp, thì hãy giao tiếp với người duy trì qua danh sách thư của dự án và hỏi tư vấn về cách xử lý. Một khi mã nguồn được chấp nhận, hãy tiếp tục duy trì nó bên trong dự án, và làm việc với những người khác để cải thiện chức năng đó.
Điều quan trọng phải nhớ rằng mỗi dự án có thể khác nhau trong cách mà mã nguồn được đệ trình, được kiểm thử và được chấp nhận. Nếu qui trình đó là không rõ ràng, hãy yêu cầu trợ giúp và giám sát các danh sách thư của dự án đối với các công ty khác đang làm thứ y hệt, và xử lý tương tự theo.
NHỮNG LỢI ÍCH CỦA NGƯỢC LÊN DÒNG TRÊN
Mã nguồn được chấp nhận ngược lên dòng trên đưa ra vài lợi ích cho dự án nguồn mở, cho các công ty đệ trình mã nguồn tới các dự án dòng trên, và cho hệ sinh thái nguồn mở nói chung.
Dưới đây là một danh sách các ưu điểm của việc ngược lên dòng trên.
1. Ít mã nguồn hơn phải duy trì trong nội bộ. Một khi mã nguồn trong nội bộ trở thành một phần của cây mã nguồn chính, thì nỗ lực cần thiết để duy trì mã nguồn còn lại có thể thấp đi đáng kể, vì kho mã nguồn nội bộ là nhỏ hơn. Hơn nữa, mã nguồn đã được ngược lên dòng trên sẽ tiến hóa với dự án, làm giảm đi khối lượng các nỗ lực được yêu cầu nhằm duy trì một cây phát triển song song.
2. Nhiều người đóng góp hơn. Khi mã nguồn được chấp nhận ngược lên dòng trên, thì nó trở thành một phần nhìn thấy được của dự án. Điều này cho phép những lập trình viên khác đóng góp cho nó, đệ trình những tính năng mới, mở rộng chức năng hiện có và kiểm thử nó.
3. Chất lượng mã nguồn tăng qua sự rà soát lại ngang hàng. Mã nguồn được đệ trình cho một dự án nguồn mở thường nhận được sự rà soát lại ngang hàng đáng kể như một phần của qui trình đệ trình thông thường. Điều này có được trong một chu trình đóng góp ý kiến phản hồi dẫn tới sự cải thiện của mã nguồn, và cuối cùng mã nguồn chất lượng cao hơn sẽ được sử dụng trong các sản phẩm thương mại.
4. Tích hợp và kiểm thử nhanh hơn. Việc ngược lên dòng trên làm đơn giản hóa và tăng tốc cho qui tình tích hợp PMTDNM hoặc các cập nhật mới. Khi việc duy trì một cây phát triển riêng rẽ (Hình 2), thì chu trình tích hợp có thể bị chậm vì sự tích hợp, kiểm thử và gỡ rối các lỗi không được dự kiến trước đòi hỏi phải duy trì mã nguồn trong nội bộ. Nếu những thay đổi trong dự án ngược lên dòng trên đã đứt đoạn với mã nguồn trong nội bộ, thì trách nhiệm của các lập trình viên trong nội bộ phải sửa và kiểm tra bất kỳ sự đứt đoạn nào trước khi sản phẩm đó có thể được xuất ra ngoài. Vì mã nguồn ngược lên dòng trên đã trở nên nhìn thấy được đối với phần còn lại của dự án, nên khả năng của những đứt đoạn không được dự kiến trước đó sẽ giảm.
Hình 2: Xem ở mức cao đối với một qui trình phát triển điển hình: Sự thích nghi trong nội bộ của mã nguồn riêng có thể dẫn tới các chu trình phát triển dài hơn.
Ngược lên dòng trên có thể giúp tránh được những đứt đoạn đó trong mã nguồn, vì những tính năng ngược lên dòng trên sẽ được kiểm thử trong dự án dòng chính, và bất kỳ vấn đề nào cũng sẽ được thấy và được sửa trước khi có một phát hành dự án. Hơn nữa, chỉ một lượng mã nguồn nhỏ hơn sẽ cần thiết phải được duy trì trong nội bộ, làm giảm lượng mã nguồn tùy biến được duy trì một cách tách biệt có thể làm nhẹ bớt đáng kể những nỗ lực tái tích hợp.
Hình 3: Qui trình phát triển tương tự với việc ngược lên dòng trên để làm giảm sự thích nghi trong nội bộ, làm cho các chu trình phát triển ngắn hơn và thời gian đưa ra thị trường nhanh hơn.
5. Tác động tới đường lối của dự án. Đối với các công ty dựa vào PMTDNM để xây dựng một sản phẩm, mã nguồn ngược lên dòng trên là một cách thức hiệu quả để đưa ra sự lãnh đạo kỹ thuật bên trong một dự án, khi nó có thể chỉ dẫn đường lối của dự án và đảm bảo giữ gìn được sự bền vững. Sự tương tác với những người tham gia dự án ở bên ngoài cũng có thể làm tăng khả năng những người khác sẽ nhận thức được về các nhu cầu của công ty, và họ có thể có khả năng hơn để giúp triển khai những tính năng và chức năng mới nếu họ có quan tâm tới chúng.
6. Giảm các chi phí đạt được sự tuân thủ. Sự tuân thủ giấy phép là một khía cạnh sống còn của bất kỳ chiến lược tiêu dùng nguồn mở nào. Việc ngược lên dòng trên làm giảm lượng mã nguồn nội bộ phải được theo dõi một cách độc lập từ dự án nguồn mở cha.
Để có thêm thông tin về sự tuân thủ, xin hãy tới thăm Chương trình Tuân thủ Mở của Quỹ Linux tại: http://www.linuxfoundation.org/programs/legal/compliance. Chương trình này đưa ra một số nguồn tài nguyên để giúp các công ty đạt được sự tuân thủ một cách có hiệu quả.
7. Giảm các rủi ro của chuỗi cung ứng. Những đóng góp ngược lên dòng trên còn làm được nhiều hơn là giảm những nỗ lực phát triển và tích hợp và các chi phí cho người đệ trình. Chúng còn có thể là biện pháp có hiệu quả để đảm bảo sự ổn định trong một chuỗi cung ứng nguồn mở của công ty.
Việc kết hợp phần mềm ở bên ngoài trong một sản phẩm đòi hỏi một sự tập trung thận trọng về tính ổn định của chuỗi cung ứng phần mềm. Những đóng góp ngược lên dòng trên có thể bù đắp cho những rủi ro từ đường hướng hoặc tính bền vững của dự án, vì những đóng góp mã nguồn có thể đưa ra một ảnh hưởng tích cực trong đường hướng của dự án. Bằng việc đưa ra chỉ dẫn thông qua những đệ trình mã nguồn, một công ty có thể đảm bảo rằng những phiên bản trong tương lai của PMTDNM sẽ tiếp tục cung cấp được giá trị cho qui trình phát triển của họ.
8. Tăng cường cho dự án. Những đóng góp ngược lên dòng trên giúp đưa ra sự ổn định cho dự án nguồn mở vì chúng là một dấu hiệu rõ ràng rằng dự án là hữu dụng và quan trọng. Sự hỗ trợ mạnh mẽ từ các công ty đóng góp có xu hướng thu hút được những người tham gia khác, làm gia tăng tiếp tục tính bền lâu của dự án.


NHỮNG THỰC TIỄN TỐT NHẤT CỦA NGƯỢC LÊN DÒNG TRÊN
Có nhiều cách thức để đóng góp cho những thay đổi ngược lên dòng trên cho một dự án nguồn mở. Điều sau đây được khuyến cáo như là những điểm khởi đầu:
1. Thiết kế và triển khai mã nguồn với ngược lên dòng trên trong đầu
Không phải tất cả những sửa đổi là phù hợp cho sự đóng góp trở ngược lại cho một dự án. Ví dụ, mã nguồn với những phụ thuộc sở hữu độc quyền sẽ không thể được giải quyết một cách tự do, mã nguồn với những vấn đề về an ninh hoặc tính ổn định, hoặc mã nguồn mà không được xây dựng trong các công cụ nguồn mở tiêu chuẩn tất cả có thể sẽ là có vấn đề khi đệ trình.
Những cải tiến chức năng cải thiện mã nguồn gốc ban đầu để làm cho nó ổn định hơn, hiệu năng tốt hơn, hoặc mềm dẻo hơn có xu hướng sẽ là những ứng viên tốt hơn. Chúng có thể thường được đóng góp mà không có việc gây rủi ro cho các nguồn của các ưu điểm cạnh tranh, và có thể sẽ có được sự cuốn hút rộng rãi hơn vượt ra ngoài các lập trình viên của riêng một công ty. Điều này là lý tưởng cho dự án, khi nó không chỉ cải thiện được tập hợp các tính năng, mà còn cho người đệ trình, khi mà nó làm gia tăng khả năng những người khác sẽ giúp duy trì mã nguồn được đóng góp đó.
2. Đảm bảo sự đóng góp là hữu dụng đối với những người khác. Những người duy trì của dự án thường nhìn vào số lượng những người sử dụng cho một tính năng được đóng góp. Mã nguồn mà cải thiện được chức năng của dự án đối với một số lượng rộng lớn những người sử dụng thường được ưu tiên hơn mã nguồn với khả năng áp dụng bị hạn chế.
3. Hãy luôn tham gia trong sự phát triển ngược lên dòng trên. Việc duy trì mã nguồn ngược lên dòng trên chỉ giống như việc duy trì bất kỳ sự đệ trình nào khác cho một dự án nguồn mở. Trong khi những người khác có thể đóng góp những thay đổi và những sửa lỗi, thì họ không có trách nhiệm phải làm thế. Hãy lên kế hoạch để giữ các nhân viên đã tham gia vào sự phát triển mở, đặc biệt trong quá trình chuyển tiếp ngược lên dòng trên. Có thể mất thời gian để xây dựng một đơn vị những người đóng góp từ bên ngoài.
4. Cung cấp tài liệu. Hãy lập tài liệu cho mã nguồn một cách bao quát, và đưa ra những trường hợp điển hình và các chứng minh khái niệm, đặc biệt nếu tính năng mới là phức tạp. Nếu mục tiêu là để tuyển mộ các lập trình viên từ bên ngoài để bù đắp sau này cho các chi phí phát triển trong nội bộ, hãy làm cho nó dễ dàng đối với họ để hiểu được cách mà tính năng đó được sử dụng.
5. Ngược lên dòng trên vì những lý do đúng đắn. Việc ngược lên dòng trên không phải là một chiến lược từ bỏ mã nguồn, trừ phi công ty đã được cam kết rồi với một cộng đồng ở bên ngoài có thiện chí để duy trì nó. Mã nguồn không được duy trì thường bị loại bỏ khỏi một dự án khi nó trở nên rõ ràng không có ai có thiện chí sửa các vấn đề.
6. Lắng nghe các ý kiến phản hồi, và hành động dựa vào đó
Khi đệ trình mã nguồn nội bộ ngược lên dòng trên, điều quan trọng phải có trách nhiệm đối với những ý kiến phản hồi và những câu hỏi, khi những lập trình viên và những người duy trì khác có thể không quen thuộc với những động lực tiến hành những thay đổi đó. Hãy sẵn sàng chuẩn bị và trả lời những câu hỏi, và giải thích cơ sở của tính năng đó.
Những ý kiến phản hồi ngay thẳng bộc trực và sự rà soát lại ngang hàng là nền tảng cho mô hình phát triển nguồn mở. Nếu một người duy trì yêu cầu những thay đổi đối với sự đệ trình để làm cho nó tương thích được hơn với dự án cha, hãy đánh giá và triển khai ý kiến phản hồi đó. Đi theo sự dẫn dắt của người duy trì của dự án có thể đòi hỏi những sửa đổi cho sự đệ trình, nhưng sẽ làm gia tăng khả năng những người khác tham gia dự án sẽ giúp duy trì mã nguồn trong tương lai.
7. Tuân theo kiểu lập trình phù hợp. Nhiều dự án có những chỉ dẫn tiêu chuẩn cho cách mà mã nguồn sẽ được định dạng và được đệ trình. Một số dự án cũng có chỉ dẫn rất cụ thể về cách mà mã nguồn nên được cấu trúc. Điều quan trọng phải đảm bảo rằng những đóng góp ngược lên dòng trên khớp được với những chỉ dẫn đó, vì sự không tôn trọng có thể dẫn tới một sự từ chối từ người duy trì của dự án.
8. Tuân theo các qui trình được thiết lập của dự án. Hầu hết các dự án nguồn mở đã chi tiết hóa những chỉ dẫn cho việc đệ trình các bản vá và qui trình rà soát lại. Những qui trình này thường được thực hiện một cách nghiêm túc, và những đệ trình cho dự án phải tuân theo chúng sát sao. Chủ đề này được đề cập tới chi tiết hơn trong một xuất bản phẩm khác của Quỹ Linux, “Hiểu biết về mô hình phát triển nguồn mở”.
Kết luận
Bài viết này đã trình bày khái niệm về ngược lên dòng trên, một khía cạnh cơ bản của qui trình phát triển nguồn mở. Việc ngược lên dòng trên là qui trình của việc đệ trình những sửa đổi trong nội bộ đối với PMTDNM ngược trở lại cho dự án để đưa vào trong cây phát triển chính. Qui trình này có thể giảm được đáng kể các chi phí bằng việc giảm thiểu mã nguồn được duy trì trong nội bộ. Bằng việc tuân thủ các thực tiễn tốt nhất và làm việc bên trong các qui trình của dự án, việc ngược lên dòng trên có thể làm cho các chi phí duy trì thấp hơn, sự phát triển các tính năng nhanh hơn và các sản phẩm tốt hơn.
Cùng trong loại bài này, chúng ta đã đi qua các bài: (1) Tìm hiểu mô hình phát triển phần mềm tự do nguồn mở; (2) Vòng đời tính năng và những đặc tính của mô hình phát triển nguồn mở; kỳ sau chúng ta sẽ đề cập tới việc thiết lập chiến lược phần mềm nguồn mở để có thể từng bước áp dụng được mô hình phát triển của nó vào trong công việc hàng ngày của công ty và/hoặc tổ chức.
Trần Lê
Bài đăng trên tạp chí Tin học & Đời sống số tháng 05/2012, trang 64-68.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.