Release
management in open source software projects
By Sander van der Waal,
Published: 26 October 2010, Reviewed: 12 November 2012
Bài được đưa lên
Internet ngày: 12/11/2012
Lời
người dịch: Nguyên tắc của phát triển phần mềm tự
do nguồn mở (PMTDNM) là phát hành sớm và phát hành
thường xuyên. Để điều này xảy ra được, cần tới
một qui trình phát hành được xác định trước một
cách hợp lý và rõ ràng. “Là cơ bản để có một
qui trình được xác định tốt hiện diện cho việc tạo
ra các phát hành đó - quan trọng hơn nhiều, trong thực
tế, hơn hầu hết các hoạt động khác trong phát triển
phần mềm. Điều này là cần thiết để đảm bảo rằng
tất cả các vấn đề pháp lý được giải quyết và
rằng chất lượng của một phát hành là đủ tốt để
là hữu dụng cho những người sử dụng. Điều này không
có nghĩa là một phát hành phải là hoàn chỉnh hoặc rằng
nó phải là không có lỗi; trong thực tế, điều này
không bao giờ thực sự là như vậy cả. Nó đơn giản có
nghĩa là tình trạng của từng phát hành là được làm
thành tài liệu tốt, để quản lý những kỳ vọng của
người sử dụng”. Bài viết chỉ ra cho bạn tỉ mỉ
từng giai đoạn trong qui trình phát hành rất quan trọng
này.
Quản lý phát hành là
về quản lý qui trình xây dựng, đóng gói và phân phối
phần mềm để tiêu dùng. Trong tài liệu này chúng tôi sẽ
giải thích qui trình quản lý phát hành trong các dự án
phần mềm nguồn mở (PMNM) và nhấn mạnh tới các bước
quan trọng nhất trong qui trình đó. Chúng tôi cũng đã
xuất bản một tài liệu nói thêm về các chi tiết kỹ
thuật của thực
tiễn tốt nhất (bản
dịch tiếng Việt) trong quản lý phát hành và đưa ra
một danh sách chọn có thể là hữu dụng khi làm một
phát hành.
Giới thiệu
Trong các dự án PMNM,
điều quan trọng là phần mềm được phát hành sớm và
thường xuyên. Là cơ bản để có một qui trình được
xác định tốt hiện diện cho việc tạo ra các phát hành
đó - quan trọng hơn nhiều, trong thực tế, hơn hầu hết
các hoạt động khác trong phát triển phần mềm. Điều
này là cần thiết để đảm bảo rằng tất cả các vấn
đề pháp lý được giải quyết và rằng chất lượng
của một phát hành là đủ tốt để là hữu dụng cho
những người sử dụng. Điều này không có nghĩa là một
phát hành phải là hoàn chỉnh hoặc rằng nó phải là
không có lỗi; trong thực tế, điều này không bao giờ
thực sự là như vậy cả. Nó đơn giản có nghĩa là tình
trạng của từng phát hành là được làm thành tài liệu
tốt, để quản lý những kỳ vọng của người sử dụng.
Bạn sẽ thấy rằng
các công cụ là quan trọng trong một dự án PMNM cũng đóng
một vai trò không thể thiếu trong quản lý phát hành. Các
công cụ quan trọng nhất trong khía cạnh này là:
- Các danh sách thư cho giao tiếp
- Trình theo dõi các vấn đề (issue tracker) cho việc lên kế hoạch các phát hành và quản lý phạm vi
- Hệ thống kiểm soát phiên bản cho việc theo dõi và giám sát mã được phát hành
Có một số vai trò
trong qui trình quản lý phát hành. Trong giai đoạn sớm của
dự án, có khả năng là những vai trò đó sẽ được một
người duy nhất triển khai. Khi dự án chín muồi, chúng
có thể được chia tách và đại diện cho các thành viên
các đội khác nhau. Các vai trò khác nhau trong các qui trình
quản lý phát hành là:
- Kiến trúc sư (Architect): người có trách nhiệm cho việc nhận diện, tạo và triển khai qui trình phát hành
- Người quản lý (Manager): người giám sát qui trình phát hành
- Người tạo thuận lợi (Facilitator): liên lạc giữa tất cả các biên đóng góp trong một phát hành
Hãy nhìn qua hầu hết
các bước quan trọng trong qui tình quản lý phát hành.
Phạm vi và kế
hoạch
Có một số vấn đề
thường là quan trọng cho các dự án nguồn mở, nhưng trở
nên sống còn khi dự án xem xét tạo ra một phát hành.
Trước hết, là cơ bản để đảm bảo sự tương thích
giấy phép của mã. Có khả năng là mã của dự án phụ
thuộc vào một số thư viện bên ngoài, mỗi thư viện
của nó sẽ có giấy phép phần mềm của riêng nó. Kiến
trúc sư sẽ phải kiểm tra liệu giấy phép của thư viện
đó có cho phép dự án phân phối lại nó với mã của
riêng nó hay không. Lý tưởng là, điều này sẽ xảy ra
lần đầu thư viện này được sử dụng trong dự án,
nhưng trong bất kỳ trường hợp này phải chắc chắn
rằng mọi vấn đề về sở
hữu trí tuệ (IP) (bản
dịch tiếng Việt) được quan tâm. Hệt như với tính
tương thích về giấy phép, điều này nên được thực
hiện trên cơ sở liên tục, những đặc biệt quan trọng
khi chuẩn bị phát hành mã.
Khi chuẩn bị một
phát hành mới, người quản lý phát hành cần xác định
phạm vi và kế hoạch của nó. Họ nên kéo vào những
người đệ trình (committer) và những người sử dụng và
tìm kiếm một vài mức thỏa thuận từ họ vè phạm vi
và kế hoạch của phát hành. Điều này là vì người sử
dụng sẽ đóng một vai trò rất quan trọng trong việc
kiểm thử phát hành trong tương lai và áp dụng phát hành
một khi nó được làm xong. Vì lý do này, tất cả giao
tiếp về phạm vi và kế hoạch của phát hành sẽ là
truy cập được công khai, ví dụ thông qua một danh sách
thư công cộng. Trong khi qui trình này thường được người
quản lý phát hành giám sát, thì nó có thể được người
tạo thuận lợi kiểm soát.
Trọng tâm đối với
qui trình lên kế hoạch phát hành là trình theo dõi các
vấn đề. Công cụ này được sử dụng để làm tài
liệu cho tình trạng của tất cả các vấn đề có liên
quan tới dự án và cung cấp một phương tiện lập lịch
và theo dõi các vấn đề nào sẽ có trong phát hành nào.
Phạm vi và kế hoạch của phát hành đạt được như thế
nào sẽ phụ thuộc phần lớn vào cách mà dự án được
điều hành (bản
dịch tiếng Việt). Từ quan điểm kỹ thuật, nó
thường sẽ là kiến trúc sư, người sẽ cần phải phân
tích danh sách các vấn đề còn chưa được giải quyết
trước khi phát hành. Trong sự cộng tác với người quản
lý phát hành, họ sẽ quyết định những vấn đề nào
sẽ được giải quyết trong phát hành này và những vấn
đề nào sẽ được chuyển sang một phát hành sau đó. Họ
sẽ không cố gắng sửa tất cả các vấn đề
trong bất kỳ phát hành nào được đưa ra khi điều
này là một cách chắc chắn để đảm bảo rằng phát
hành đó sẽ không bao giờ xảy ra. Bất kỳ vấn đề
nào bị chậm sẽ được chuyển sang một phát hành muộn
sau trong trình theo dõi các vấn đề sao cho một danh sách
các vấn đề được biết và lộ trình cho phát hành đó
có thể được tạo ra. Nếu vấn đề đó trước đó đã
được lên lịch cho một phát hành nhưng sau khi cân nhắc
bị trễ lại, thì điều này nên được ghi lại trong tài
liệu phát hành sao cho người sử dụng sẽ biết rằng
phần này của lịch còn chưa được đáp ứng.
Sự không giữ đúng
thời hạn của một vấn đề không phải lúc nào cũng là
điều không tốt, vì thế thường không phải là một vấn
đề nếu các vấn đề được chuyển sang một phát hành
khác. Nó sẽ phục vụ như một sự nhắc nhở cho những
người sử dụng dự án về những gì họ có thể mong
đợi trong phát hành tiếp sau. Nếu người quản lý phát
hành chỉ rõ ràng rằng các lập trình viên tích cực sẽ
không giải quyết được một vấn đề được đưa ra
trong một phát hành được đưa ra, thì người sử dụng
có thể quyết định nó là quan trọng tới đâu đối với
họ. Nếu điều đó đủ quan trọng, thì bản thân họ sẽ
có thể đóng góp cho dự án bằng việc cung cấp một bản
vá (bản
dịch tiếng Việt). Điều này chỉ là một ví dụ về
vì sao giao tiếp là cơ bản cho việc giữ cho từng người
có được thông tin thông qua qui trình đó.
Đánh số phiên bản
Mỗi phát hành sẽ
được nhận diện một cách duy nhất bằng một số phiên
bản. Các số đó không hoàn toàn là tùy ý nhưng được
sử dụng tuân theo một sơ đồ đặc biệt mà sẽ
cho bạn thông tin bổ sung về phát hành đó. Có những sơ
đồ khác nhau cho việc thể hiện các số phiên bản trong
các phát hành phần mềm. Chúng tôi sẽ thảo luận ngắn
gọn một trong những sơ đồ phổ biến hơn, nơi mà các
số phiên bản là ở dạng x.y.z hoặc .. (...) .Số phiên
bản chính chỉ tăng khi một lượng các chức năng
mới đáng kể được bổ sung vào phát hành trước đó.
Trong các trường hợp như vậy, số phiên bản phát hành
mới sẽ là (x+1).0.0. Số phiên bản phụ tăng chỉ
khi một số chức năng được bổ sung vào phát hành mới,
trong trường hợ đó số phiên bản phát hành mới sẽ là
x. (y+1).0. Khi phát hành mới chủ yếu là các sửa lỗi,
sẽ có cái gọi là phát hành điểm. Số phiên bản của
phát hành mới trong các trường hợp như vậy sẽ chỉ có
số phiên bản vi mô gia tăng, thành x.y.(z+1).
Tuy nhiên, một số dự
án sử dụng các hậu tố trong số phiên bản để chỉ
sự ổn định của mã. Ví dụ, -alpha chỉ mã không ổn
định, trong khi -beta chỉ mã với giao diện lập trình ứng
dụng (API) ổn định nhưng có thể vẫn còn các lỗi
trong đó. Các dự án khác sử dụng số phiên bản phụ
để chỉ mã ổn định/không ổn định, với một số
chẵn cho các phát hành ổn định và một số lẻ cho các
phát hành không ổn định. Theo ngữ cảnh này, không ổn
định không có nghĩa là không sử dụng được. Nó đơn
giản có nghĩa rằng mã có thể thay đổi trong phát hành
tiếp sau. Nó phục vụ như một cảnh báo cho những người
sử dụng tiềm năng rằng họ chỉ neenn sử dụng các
phát hành đó nếu họ được chuẩn bị để đặt nỗ
lực vào trong việc duy trì phần mềm của họ khi nâng
cấp. Điều này có thể đòi hỏi một số bước thêm
bằng tay trong nâng cấp.
Các ứng viên phát
hành
Là thực tiễn tốt
để tạo một ứng viên phát hành RC (Release Candidate)
trước khi xuất bản một phát hành cuối cùng. Một RC là
một phát hành thông thường, ngoại trừ là số phiên bản
có một hậu tố -Rcx (x bắt đầu ở 1 và gia tăng với
từng RC mới) để chỉ rằng đây chưa là phát hành cuối
cùng. Điều này có nghĩa là nó còn chưa được phê chuẩn
và có thể chứa các lỗi sống còn. Lý do cho việc tạo
một RC là để đưa vào một chu kỳ kiểm thử trong qui
trình phát hành. Mỗi phát hành nên được kiểm thử trên
càng nhiều nền tảng và từ càng nhiều người sử dụng
càng tốt, và cách tốt nhất để làm thế là bằng việc
phân phối một RC. Một RC khác với một phát hành cuối
cùng chỉ ở hậu tố số phiên bản; ngoài điều đó ra,
đây là một phát hành thông thường.
RC sẽ được tạo ra
bằng việc sử dụng hệ thống kiểm soát phiên bản.
Quản lý phát hành là một trong nhiều lý do quan trọng vì
sao sử dụng một hệ thống kiểm soát phiên bản là sống
còn cho một dự án phần mềm. Nó cho phép dự án phát
triển tiếp trong nhánh chính hoặc thân của dự án, trong
khi công việc tiếp tục về phát hành trong một nhánh
phát hành riêng rẽ mà không xung đột với các hoạt động
phát triển chính. Thậm chí khi đội dự án không muốn
tạo một nhánh phát hành, họ sẽ vẫn tạo một thẻ sao
cho họ có thể luôn quay ngược lại và tạo lại phát
hành từ mã nguồn y hệt.
Là hữu dụng để áp
dụng một qui ước đặt tên hợp lý khi tạo một nhánh
phát hành hoặc một thẻ. Điều này cho phép các thẻ
phát hành sẽ được được ra dễ dàng. Thông thường,
thẻ đó sẽ là một biến thể về tên của phát hành.
Ví dụ, một số dự án sử dụng ALL CAPS để chỉ các
thẻ phát hành. Vì thế, foo-1.2 có thể được đặt thẻ
FOO-1-2. Thường là tốt hơn để sử dụng '-' hơn là '_'
như trong hầu hết các trình duyệt thì '_' bị mất khi
một siêu liên kết được gạch chân.
Giao tiếp với cộng
đồng là rất quan trọng ở từng giai đoạn của qui
trình phát hành, nhưng đặc biệt như vậy trong giai đoạn
ngay trước khi kiến trúc sư tạo ra nhánh phát hành. Vì
bản chất tự nhiên được phân tán của các dự án
nguồn mở, sự giao tiếp là cơ bản để chắc chắn rằng
tất cả các lập trình viên sẽ đề xuất mã mà là một
phần của phạm vi của dự án được đồng ý, đúng
lúc. Sau khi tất cả mã đã được đệ trình, kiến trúc
sư có trách niệm tạo ra nhánh phát hành. Là thực tiễn
tốt để triển khai một sự làm đông lạnh mã khi kiến
trúc sư đang làm việc về điều này. Chính trách nhiệm
của người tạo thuận lợi để thông tin cho cộng đồng
rằng nhành phát hành đã được tạo ra.
Sau khi nhánh đã được
tạo ra, kiến trúc sư sẽ lắp ráp các tệp nhị phân.
Điều này sẽ được tự động càng nhiều càng tốt để
tránh nhân bản nỗ lực và làm dễ cho qui trình tạo một
phát hành. Thông thường, vài gói phân phối sẽ được
lắp ráp ở giai đoạn này cho các nền tảng khác nhau mà
dự án hỗ trợ. Vì chúng ta đang nói về các dự án
nguồn mở, nên dự án cũng sẽ cung cấp các tệp nguồn
trong một phân phối nhị phân, bao gồm những chỉ dẫn
rõ ràng về cách để xây dựng ứng dụng. Điều này
khuyến khích mọi người đóng góp bằng việc giảm thiểu
số lượng các vòng họ cần phải nhảy qua để có được
nguồn. Các phân phối sẽ được làm cho sẵn sàng như là
các tệp được nén, thường là các tệp zip cho Windows,
tar.gz cho Linux và Apple Disk Image (tệp .dmg) cho những người
sử dụng Mac. Ở giai đoạn này, tài liệu cũng phải được
kiểm tra và được mở rộng ở những nơi cần thiết.
Xuất bản và kiểm
thử RC
Pha tiếp theo của qui
trình phát hành là để làm RC sẵn sàng để kiểm thử.
Các gói có thể được phân phối thông qua website, nhưng
nó phải rõ ràng đối với những người sử dụng rằng
nó còn chưa phải là phát hành cuối cùng. Nếu dự án
đang phát triển một ứng dụng web, có thể có một máy
chủ demo sẵn sàng. Nếu RC là sẵn sàng trên máy chủ
demo, thì sẽ là dễ dàng hơn cho những người sử dụng
ít biết kỹ thuật hơn để giúp kiểm thử RC. Sự sẵn
sàng của RC nên được công bố rộng rãi trong các kênh
công khai để chắc chắn rằng nó được càng nhiều
người kiểm thử càng tốt trên càng nhiều nền tảng
càng tốt.
Hướng tới phát
hành cuối cùng
Các lỗi được thấy
trong RC sẽ phải được sửa trước khi phát hành cuối
cùng được tạo ra. Điều này sẽ liên quan tới việc áp
dụng một bản
vá (bản
dịch tiếng Việt) cho nhánh phát hành và tạo ra một
RC với một số phiên bản khác, như với hậu tố -RC2.
Qui trình này nên được lặp đi lặp lại cho tói khi
không còn lỗi nào nữa được thấy.
Một khi một RC được
kiểm thử hoàn toàn, nó cần sự phê chuẩn để tạo
thành cơ sở của phát hành cuối cùng. Qui trình phê chuẩn
này sẽ phụ thuộc vào mô hình điều hành được dự án
áp dụng. Một khi một RC đã được phê chuẩn, người
kiến trúc sư sẽ phải tạo ra phát hành cuối cùng. Đây
là thực
tiễn
tốt (bản
dịch tiếng Việt) để ký mật mã cho phát hành cuối
cùng sao cho tính toàn vẹn của nó có thể được bất kỳ
ai tải nó về kiểm tra được.
Cũng là một ý tưởng
tốt để cung cấp một trình cài đặt cho những người
sử dụng hiện hành và trong tương lai. Điều này sẽ cho
phép họ có được nhanh và dễ dàng và vì thế làm gia
tăng những cơ hội mà họ sẽ trao ý kiến phản hồi cho
dự án. Các nền tảng khác nhau có các gói cài đặt khác
nhau. Có một số trình cài đặt liên nền tảng có thể
được sử dụng, dù chúng đặt ra một số hạn chế
hiện nay. Tuy nhiên, dự án cũng nên làm cho càng dễ càng
tốt cho các bên thứ 3 để cung cấp một trình cài đặt
đặc thù nền tảng. Thường điều này có nghĩa không gì
hơn việc cung cấp một phân phối nguồn tốt cho họ để
làm việc.
Phát hành sau đó phải
được làm cho sẵn sàng thông qua các kênh phân phối của
dự án. Các kênh đó nên có khả năng điều khiển yêu
cầu được mong đợi cho phát hành đó. Tuy nhiên, làm cho
một phát hành sẵn sàng là không đủ. Những người sử
dụng (trong tương lai) cũng phải nhận thức được về
phát hành mới thông qua các công bố tin tức. Người tạo
thuận lợi có trách nhiệm về điều này.
Các phát hành là một
khoản tin tức chính cho một dự án và nên đặc trưng
trong các blog, RSS feed và danh sách công bố của dự án.
Người kiến trúc sư sẽ phải cập nhật các hồ sơ của
dự án trong các catalog, các kho ứng dụng và các danh sách
tương tự. Họ cũng sẽ cần cập nhật tệp
DOAP (bản
dịch tiếng Việt), và chắc chắn tất cả các catalog
có DOAP sẽ được phát ra.
Kết luận
Việc phân phối các
phát hành là một khía cạnh quan trọng của bất kỳ dự
án nguồn mở nào. Nó cho phép mọi người thử dự án dễ
dàng hơn và vì thế làm gia tăng cơ hội có được những
người đóng góp mới. Vì thế chúng tôi khuyến cáo mạnh
mẽ thực thế của việc phát
hành sớm (bản
dịch tiếng Việt). Dù qui trình có thể xem là phức
tạp, một khi được thực hiện và được kiểm thử một
hoặc hai lần thì nó sẽ trở nên dễ dàng hơn. Cũng là
dễ dàng hơn để làm một phát hành trước khi kho mã trở
nên lớn hơn, nó là lý do khác vì sao có ý nghĩa để
phát hành sớm. Để giúp nhiều hơn một chút về kỹ
thuật của qui trình phát hành, chúng tôi có tài liệu
khác mô tả một số chỉ
dẫn thực tiễn tốt nhất (bản
dịch tiếng Việt) cùng với một danh sách chọn.
Release
management is about managing the process of building, packaging and
distributing software for consumption. In this document we will
explain the process of release management in open source software
projects and highlight the most important steps in this process. We
have also published a document that elaborates on the technical
details of best
practice in release management and provides a checklist that can
be useful when making a release.
In
open source software projects, it is important that the software is
released early and often. It is essential to have a well-defined
process in place for creating these releases - much more important,
in fact, than it is for most other activities in software
development. This is necessary to ensure that all legal issues are
addressed and that the quality of a release is good enough to be
useful to users. This does not mean that a release must be complete
or that it must be bug-free; in practice, this is never really the
case. It simply means that the status of each release is well
documented, in order to manage user expectations.
You
will see that the tools that are important in an open source software
project also play an indispensable role in release management. The
most important tools in this respect are:
- Mailing lists for communication
- The issue tracker for release-planning and scope management
- The version control system for tracking and tracing the released code
There
are a number of roles in the release management process. In an
early-stage project, it is likely that these roles will be carried
out by a single person. As a project matures, they can be separated
out and delegated to different team members. The different roles in
the release management process are:
- Architect: the person responsible for identifying, creating and implementing the release process
- Manager: the person overseeing the release process
- Facilitator: the liaison between all stakeholders in a release
Let’s
take a look at the most important steps in the release management
process.
There
are a couple of issues that are generally important for open source
projects, but become crucial when the project considers creating a
release. First of all, it is essential to ensure licence
compatibility of the code. It is likely that the project’s code
depends on some external libraries, each of which will have its own
software licence. The architect will have to check whether the
licence of that library permits the project to redistribute it with
its own code. Ideally, this will happen the first moment this library
is used in the project, but in any case should be no later than when
the first release is prepared. Also, it is important for the project
to make sure that all issues regarding intellectual
property (IP) have been taken care of. Just as with licence
compatibility, this should be done on an ongoing basis, but is
especially important when preparing a release of the code.
When
preparing a new release, the release manager needs to determine its
scope and planning. They should involve the committers and users and
seek some level of agreement from them about the scope and planning
of the release. This is because the users will play a very important
role in testing the prospective release and adopting the release once
it has been made final. For this reason, all communication about the
scope and planning of the release should be publicly accessible, for
example via a public mailing list. While this process is usually
overseen by the release manager, it may be controlled by the
facilitator.
Central
to the release-planning process is the issue
tracker. This tool is
used to document the status of all issues relating to the project and
provides a means of scheduling and keeping track of which issues will
be in which release. How the scope and planning of the release is
achieved depends largely on how the project is governed.
From a technical perspective, it will usually be the architect who
will need to analyse the list of unresolved issues prior to release.
In collaboration with the release manager, they will decide which
issues will be resolved in this release and which will be moved to a
later release. They should
not attempt to fix all
issues in any given release as this
is a sure way of ensuring that the release never happens.
Any issues that are to be delayed should be moved to a later release
in the issue tracker so that a known issues list and a roadmap for
the release can be created. If the issue had previously been
scheduled for a release but after consideration is being delayed,
this should be recorded in the release documentation so that users
will know that this part of the schedule has not been met.
Slippage
of an individual issue is not always a bad thing, so it is generally
not a problem if issues are moved to a later release. It will serve
as a reminder to the project’s users about what they can expect in
the next release. If the release manager clearly indicates that the
active developers will not address a given issue in a given release,
users can decide just how important it is to them. If it is important
enough, they can contribute to the project themselves by providing a
patch. This is just one example of why communication is essential
for keeping everybody informed throughout the process.
Each
release will have to be uniquely identifiable by a version number.
These numbers are not fully arbitrarily but are used according to a
specific scheme
that will give you additional information about the release. There
are various schemes for expressing version numbers in software
releases. We will briefly discuss one of the more common schemes,
whereby version numbers are of the form x.y.z or
.. .
The major
version number is increased only when a significant amount of new
functionality is added to the previous release. In such cases, the
new release version number will be (x+1).0.0. The minor
version number is increased only when some functionality
is added to the new release, in which case the new release version
number will be x.(y+1).0. When the new release consists mainly of bug
fixes, there will be a so-called point release. The version number of
the new release in such cases will only have the the micro
version number increased, resulting in x.y.(z+1).
Some
projects, however, use postfixes in the version number to indicate
the stability of the code. For example, -alpha indicates unstable
code, while -beta indicates code with a stable API (Application
Programming Interface) but that may still have bugs in it. Other
projects use the minor version number to indicate stable/unstable
code, with an even number for stable releases and an odd number for
unstable releases. In this context, unstable does not mean it is
unusable. It simply means that the code may change in the next
release. It serves as a warning to potential users that they should
only use these releases if they are prepared to put the effort into
maintaining their software when it comes to upgrading. This may
require some extra manual steps in the upgrade.
It
is good practice to create a release candidate (RC) before publishing
a final release. An RC is a normal release, except that the version
number has a postfix -RCx (x starting at 1 and increasing with every
new release candidate) to indicate that it is not the final release.
This means that it has not yet been approved and may contain critical
bugs. The reason for creating an RC is to include a test cycle in the
release process. Every release should be tested on as many platforms
and by as many users as possible, and the best way to do that is by
distributing an RC. An RC differs from a final release in the version
number postfix only; other than that, it is a regular release.
The
release candidate will be created using the version control system.
Release management is one of the many important reasons why using a
version control system is so crucial to a software project. It allows
the project to develop further on the main branch, or trunk, of the
project, while work continues on the release in a separate release
branch without interfering with the main development activities. Even
when the project team doesn’t want to create a release branch, they
should still generate a tag so they can always go back and recreate
the release from the same source code.
It
is useful to adopt a reasonable naming convention when creating a
release branch or a tag. This allows release tags to be recognised
easily. Typically, the tag will be a variation on the name of the
release. For example, some projects use ALL CAPS to indicate release
tags. Thus, foo-1.2 would be tagged FOO-1-2. It is generally better
to use ‘-‘ rather than ‘_’ as in most browsers the ‘_’
gets lost when a hyperlink is underlined.
Communication
with the community is very important at every stage of the release
process, but especially so in the period just before the architect
creates the release branch. Because of the distributed nature of open
source projects, communication is essential for making sure that all
developers will have committed the code that is part of the agreed
scope of the project, in time. After all code has been committed, the
architect is responsible for generating the release branch. It is
good practice to implement a code freeze when the architect is
working on this. It is the facilitator’s responsibility to inform
the community that the release branch has been created.
After
the branch has been created, the architect will assemble the
binaries. This should be automated as much as possible to avoid
duplication of effort and to ease the process of creating a release.
Usually, several distribution packages will be assembled at this
stage for the different platforms the project supports. Since we are
talking about open source projects, the project should also provide
the source files within a binary distribution, including clear
instructions on how to build the application. This encourages people
to contribute by minimising the number of hoops they need to jump
through in order to get to the source. Distributions should be made
available as compressed files, typically zip files for Windows,
tar.gz for Linux and an Apple Disk Image (.dmg file) for Mac users.
At this stage, the documentation must also be checked and expanded
where needed.
The
next phase of the release process is to make the release candidate
available for testing. The packages can be distributed through the
website, but it must be clear to users that it is not yet a final
release. If the project is developing a web application, there may be
a demo server available. If the release candidate is available on the
demo server, it will be easier for less technical users to help test
the release candidate. The availability of the release candidate
should be announced widely on the publication channels to make sure
that it gets tested by as many people and on as many different
platforms as possible.
Critical
bugs or errors found in the release candidate will have to be fixed
before the final release is created. This will involve applying a
patch
to the release branch and creating a new release candidate with a
different version number, i.e. with the postfix -RC2. This process
should be repeated until no more critical errors are found.
Once
a release candidate has been fully tested, it needs approval to form
the basis of the final release. This approval process will depend on
the governance model adopted by the project. Once a release candidate
has been approved, the architect will have to create the final
release. It is good
practice to cryptographically sign the final release so that its
integrity can be checked by anyone who downloads it.
It
is also a good idea to provide an installer for current and
prospective users. This will allow them to get going quickly and
easily and thus increase the chances that they will give the project
feedback. Different platforms have different install packages. There
are some cross-platform installers, which can be used, although they
impose some limitations at present. However, the project should also
make it as easy as possible for third parties to provide a
platform-specific installer. Often this means nothing more than
providing a good source distribution for them to work with.
The
release must then be made available via the project’s distribution
channels. These channels should be capable of handling the expected
demand for the release. However, making a release available is not
enough. The (prospective) users must also be made aware of the new
release via news announcements. The facilitator is responsible for
this.
Releases
are a major news item for a project and should feature in the
project’s blogs, RSS feeds and announcement list. The architect
will have to update the project’s records in catalogues, app stores
and similar lists. They will also need to update the DOAP
file, and make sure all DOAP-powered catalogues are pinged.
Distributing
releases is an important aspect of any open source project. It
enables people to try out the project more easily and hence increases
the chance of getting new contributors. Therefore we highly recommend
the practice of releasing
early. Although the process may seem complicated, once it is in
place and it has been tried once or twice it will become easier. It
is also easier to make a release before the codebase gets large,
which is another reason why it makes sense to release early.
To
help with the more technical bits of the release process, we have
another document that describes some best
practice guidelines along with a checklist.
Dịch: Lê Trung Nghĩa
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.