The
community source development model
By Gabriel Hanganu,
Published: 22 August 2008, Reviewed: 12 March 2012
Bài được đưa lên
Internet ngày: 12/03/2012
Lời
người dịch: Có khả năng không chỉ có các mô hình
phát triển nguồn đóng và nguồn mở, mà còn có cả
nguồn cộng đồng. Nếu theo thước đo của Eric
Raymond với mô hình phát triển nguồn đóng như nhà thờ
lớn, nguồn mở như cái chợ, thì nguồn cộng đồng là
cái quán trọ nằm giữa nhà thờ lớn và cái chợ. Nó
phản ánh nhận thức chưa đầy đủ và/hoặc những lý
do bất khả kháng, thường xảy ra trong những giai đoạn
đầu của một dự án 'nguồn mở'. Thường thì ở những
giai đoạn sau, các dự án nguồn cộng đồng cũng sẽ
phải tìm tới mô hình phát triển chính thống của nguồn
mở - cái chợ. Mọi người còn cần phải cảnh giác
với cái gọi là 'nguồn cộng đồng đóng', một
dạng trá hình của 3 loại trên mà đặc trưng của nó
rất dễ nhận ra - giấy phép cho loại này “không tương
thích với các yêu cầu của Định nghĩa Nguồn Mở (như
được OSI chỉ đinh), mà trong số những điều khác, nó
yêu cầu sự tự do truy cập tới mã nguồn và phân phối
phần mềm một cách tự do”.
Theo truyền thống,
phần mềm được sản xuất và phân phối tuân theo hoặc
các mô hình phát triển nguồn đóng hoặc nguồn mở.
Nguồn cộng đồng là một mô hình phát triển có ý định
tìm một cách thức nửa vời ở giữa 2 con đường trên
bằng việc mượn các yếu tố từ cả 2. Nguồn cộng
đồng và nguồn mở được so sánh chi tiết hơn trong lưu
ý ngắn gọn của OSS Watch về Nguồn
cộng đồng vs nguồn mở (bản
dịch tiếng Việt). Tài liệu này thảo luận các tính
năng chính của phát triển nguồn cộng đồng, và gợi ý
rằng, trong khi là hữu dụng cho việc điều phối những
đóng góp xuyên khắp các nhóm cơ quan, xu hướng của việc
ưu tiên mã hơn cộng đồng có thể có một tác động
lên tính bền vững tiềm tàng của mô hình này. Cùng lúc,
việc giải quyết những căng thẳng vốn có của nguồn
cộng đồng có thể là bước rất hữu dụng hướng tới
một sự hiểu biết sâu hơn về nguồn mở và về một
sự triển khai chín muồi hơn của phát triển mở khắp
các cơ quan giáo dục.
Phát triển và mua
sắm lai
Trong các dự án nguồn
cộng đồng, một số đối tác giáo dục đồng ý đóng
góp tài chính, hoặc với thời gian của các nhân viên,
cho sự phát triển của phần mềm. Trong khi sự truy cập
tới mã lúc ban đầu bị hạn chế đối với các thành
viên của nhóm, và thời gian của các nhân viên được
đóng góp như là công việc được trả tiền, thì việc
mở mã ra sau đó cho phép sự truy cập tự do công khai và
những đóng góp cá nhân của những người tình nguyện
nằm phân tán khắp toàn cầu. Vì lý do này, nguồn cộng
đồng được nói sẽ là một mô hình lai, hoặc, áp dụng
phương pháp luận kinh điển của Eric Raymond, 'quán trọ
giữa nhà thờ và cái chợ'. Mô hình này kết hợp các
thực tiễn điều hành mở và đóng, pha trộn các yếu tố
của phát triển nguồn đóng, theo nghĩa kinh điển của
một tổ chức sử dụng các nhân viên và tài nguyên để
làm việc trong một dự án, với tính mở và bản chất
tự nhiên không bắt buộc của các dự án nguồn mở
truyền thống.
Ban đầu, những đầu
tư về thời gian, thiết kế và điều hành dự án của
các lập trình viên được các trường cao đẳng, đại
học và các công ty thương mại cung cấp hơn là từ các
lập trình viên độc lập. Những đóng góp đó được
thực hiện như là pha đầu tiên của một dự án, sau đó
công việc bổ sung được đóng góp trên cơ sở liên tục,
tự nguyện từ các cá nhân và cơ quan với một sự quan
tâm liên tục trong dự án. Theo cách này, còn tranh cãi, dự
án đảm bảo sự hỗ trợ đáng kể cần thiết trogn các
giai đoạn sống còn sớm ban đầu. Đổi lại cho việc
cung cấp thời gian và các nguồn nhân lực được đồng
ý, các đối tác trong nhóm được chào sự truy cập hoàn
toàn tới mã, và vì thế một cơ hội sớm để gây ảnh
hưởng tới sự phát triển của phần mềm hướng tới
các yêu cầu đặc thù của chúng.
Những người đề
xướng nguồn cộng đồng nói rằng nó đưa ra một con
đường lai về mua sắm phần mềm. Mô hình thường được
thừa nhận như một cầu nối giữa thế giới các doanh
nghiệp hướng doanh thu và các cơ quan Giáo dục Trung học
hướng thương mại. Các giám đốc CNTT trong khu vực giáo
dục thường cần phải quyết định liệu một giải pháp
phần mềm của cơ quan sẽ được mua hay được xây dựng
trong nội bộ. Nguồn cộng đồng được cho là đánh vào
đúng sự cân bằng giữa việc mua hoặc xây dựng phần
mềm sẽ được cơ quan triển khai và duy trì. Một cơ
quan đóng góp cho sự phát triển của mã, và một cơ quan
có thể áp dụng và sử dụng nó cho các nhu cầu của một
cơ quan, thực sự không có việc làm chủ phần mềm. Vì
thế mô hình nguồn cộng đồng được nói sẽ cung cấp
cái gọi là con đường 'vay mượn', nó trao sự tốt nhất
của cả các việc mua và xây phần mềm.
Cấp vốn đặc thù
văn hóa giáo dục
Mô hình nguồn cộng
đồng đã được khởi xướng, và đã chứng minh là
thành công, trong các cơ quan Giáo dục Đại học tại Mỹ.
Khả năng áp dụng của nó cho các ngữ cảnh văn hóa khác
còn chưa được thể hiện, biết rằng sự khác nhau về
các môi trường kinh tế và giáo dục toàn cầu. Khía cạnh
này được bản thân những người bảo vệ nguồn cộng
đồng tại Mỹ thừa nhận. Brad Wheeler của Đại học
Indiana, ví dụ, chỉ ra rằng thị trường cấp vốn của
Giáo dục Đại học, so với nhiều nguồn tài chính phân
tán khác, thường thấy 'hỗn loạn' đối với người
châu Âu, những người đã phát triển một khả năng điều
phối tập trung các đầu tư cho giáo dục. Mô hình nguồn
cộng đồng có thể thành công hơn tại Mỹ chính xác vì
bản chất tự nhiên phân mảnh cao của cấp vốn hàn lâm
của Mỹ, nó đòi hỏi một cơ chế phù hợp cho việc
điều phối đầu tư.
Những triển khai các
dự án tương tự ở châu Âu và châu Phi hiện đang diễn
ra. Các ví dụ bao gồm công việc phát triển trong Sakai
tại Đại học Cambridge tại Anh, và Kuali tại Đại học
Strathmore ở Kenya. Nhận thực được sự khác biệt xuyên
các nền văn hóa của các thị trường giáo dục là một
yếu tố cơ bản trong việc lên kế hoạch cho tính bền
vững về kinh tế và văn hóa của dự án như vậy. Sự
triển khai thành công của chúng ngoài nước Mỹ phần lớn
phụ thuộc vào sự tinh chỉnh các cơ chế cấp vốn giáo
dục có liên quan tới mô hình nguồn cộng đồng đối
với các đặc thù về kinh tế và văn hóa của các nhóm
giáo dục tương ứng.
Quản trị xuyên
các cơ quan
Một số dự án lớn
nhất mà bắt đầu như nguồn cộng đồng dần dần
chuyển sang nguồn mở trong các giai đoạn sau của chúng.
Ví dụ, dự án Eclipse đã chuyển từ nguồn đóng sang
cộng đồng, sau đó dần trở thành một dự án nguồn
mở. Sakai đã bắt đầu cuộc sống như một nhóm nguồn
cộng đồng, sau đó đã chuyển sang phát triển nguồn mở.
Dự án Kuali dường như đã lấy vào một số bài học
học được trong khi phát triển Sakai, và dù nó đã bắt
đầu như một sáng kiến nguồn cộng đồng, thì nó rõ
ràng đã thể hiện ý định chuyển sang mô hình nguồn mở
trên con đường của nó tới tính bền vững.
Trong tất cả các ví
cụ, nguồn cộng đồng trông giống hơn một pha quá độ
trong các qui trình cộng tác xuyên các cơ quan, hơn là một
mô hình phát triển phần mềm của riêng nó. Sự quan sát
này gợi ý rằng mô hình nguồn cộng đồng có thể cần
được đánh giá đối với các tiêu chí khác hơn là các
tiêu chí thường được sử dụng khi đánh giá sự phát
triển của nguồn mở. Vì các dự án nguồn cộng đồng
có xu hướng tập trung nhiều hơn vào sự cộng tác giữa
các cơ quan hơn là giữa các cá nhân, nên các tiêu chí
phù hợp cho đánh giá cần phải đánh giá tính hiệu quả
của chúng trong sự phối hợp với các chính sách kinh tế
và hành chính, hơn là so với việc xây dựng các cộng
đồng xung quanh sự phát triển của mã được chia sẻ.
Một cái nhìn sát hơn
vào sự biến đổi từ các giai đoạn đầu tới sau này
của các dự án nguồn cộng đồng như Sakai đưa ra một
sự hiểu thấu hữu dụng trong mô hình phát triển của
chúng. Việc cấp vốn sớm cho ứng dụng đối với Quỹ
Mellon, nó ràng buộc 4 đối tác cơ quan (Michigan, Indiana,
MIT và Stanford) cùng nhau, chỉ ra rằng sự tập trung ban
đầu của dự án nguồn cộng đồng này từng không phải
về cộng đồng, bất chấp tên của mô hình. Biên bản
ghi nhớ Ý định được các chủ tịch của 4 đại học
ký về cơ bản đã chỉ ra những khía cạnh kinh tế, pháp
lý và hành chính có liên quan tới sự cộng tác của các
cơ quan. Theo tài liệu này, a) mỗi cơ quan có thể cung cấp
5 lập trình viên cho sự kiểm soát của Ban quản trị Dự
án Sakai; b) dự án đã được trao sử dụng phần mềm
đặc thù (và có liên quan tới sở hữu trí tuệ) mà từng
được phát triển trong nội bộ tại Michigan và Stanford;
c) sự thương mại hóa; d) các cơ quan có thể triển khai
phần mềm Sakai dựa vào sự hoàn chỉnh của dự án. Vì
thế, trọng tâm ít hơn vào việc xây dựng một cộng
đồng xung quanh mã phần mềm, và nhiều hơn vào việc tạo
ra một khung quản trị đã cho phép các phiên bản phần
mềm đó được sản xuất theo thời gian và phù hợp với
một danh sách các ưu tiên được thỏa thuận.
Phản ánh lên sự
phát triển mở
Việc ưu tiên mã hơn
cộng đồng là phổ biến trong các giai đoạn sớm của
phát triển phần mềm. Tuy nhiên, thái độ này để lộ
ra sự hiểu biết hạn chế của mối quan hệ giữa 2 yếu
tố chủ chốt của phát triển nguồn mở và vai trò của
nó trong tính bền vững dài hạn của dự án. Một dự án
nguồn cộng đồng, nơi mà sự truy cập tới mã ban đầu
bị hạn chế cho một nhóm nhỏ, được chỉ định, có
thể một cách còn gây tranh cãi làm giảm đi tổng thể
quản lý, dù sự giảm này là tối thiểu khi so sánh với
một dự án nguồn mở được quản lý tốt. Tuy nhiên, sự
truy cập có hạn chế cũng sẽ giới hạn phạm vi của
những đóng góp và sự tham gia vào dự án. Điều này là
đặc biệt quan trọng khi chúng ta xem xét rằng những
người sử dụng của ngày hôm nay sẽ là những người
lập trình của ngày mai. Hiểu được mối quan hệ sâu
hơn giữa việc phát triển mã và việc xây dựng cộng
đồng là một qui trình phức tạp, thậm chí một số dự
án mà tự công bố là nguồn mở không được thừa nhận
hoàn toàn.
Trong việc mô tả các
giai đoạn sớm của dự án Sakai, Brad Wheeler nhớ lại
thời kỳ khi các lập trình viên được chỉ định từ
các cơ quan đối tác đã vật lộn để tìm ra cách thức
có hiệu quả của việc cộng tác với nhau. Mấu chốt
cho qui trình này là việc tìm được sự cân bằng đúng
giữa các ưu tiên của các cơ quan chủ và các ưu tiên
của cộng đồng các lập trình viên được tạo ra sớm.
Giai đoạn đó là sống còn cho dự án, vì nó là ở giai
đoạn mà họ đã bắt đầu thừa nhận việc xây dựng
cộng đồng như là hữu cơ cho qui trình phát triển mã.
Các lập trình viên đã làm việc về mã của phần mềm
như những chuyên gia được các cơ quan ủy quyền, nhưng
cùng lúc họ đã phát hiện ra rằng họ cũng là những
thành viên cộng đồng theo quyền của riêng họ, những
người đã có khả năng bỏ qua các yêu cầu của các cơ
quan nếu cần.
Hệ quả là, các lập
trình viên đã nhận thức được rằng chất lượng của
mã phụ thuộc vào một số mức độ về chất lượng
của cộng đồng từng đang được hình thành. Bước này
trong việc nhận thức được vai trò của cộng đồng là
sống còn để chuyển sang một mô hình nguồn mở, như
được chỉ ra bằng sự nổi lên sau đó của các qui
trình nguồn mở điển hình - như chế độ người tài
lãnh đạo, nó dần dần trở nên hiệu quả trong việc
gây ảnh hưởng tới việc ra quyết định trong cộng
đồng. Từ viễn cảnh này, tính năng quan trọng nhất của
mô hình nguồn cộng đồng là nó có thể đưa ra một
công cụ phản ảnh xuất sắc cho việc đánh giá lại sự
phát triển của nguồn ở - trong các mức độ cá nhân,
xã hội và văn hóa, cũng như kinh tế, pháp lý và hành
chính.
Nguồn cộng đồng
đóng?
Một
ý nghĩa có thể lựa chọn của khái niệm nguồn cộng
đồng tồn tại, bổ sung thêm cho khái niệm được thảo
luận cho tới nay. Một số công ty, như Microsoft, sử dụng
khái niệm nguồn cộng đồng để tham chiếu tới việc
cấp phép của mã nguồn cho các thành viên của một cộng
đồng đóng, những người sẽ có khả năng truy cập nó
phải đưa vào một thỏa thuận giấy phép cá nhân với
người chủ của mã. Mã được sửa đổi có thể được
chia sẻ trong cộng đồng, nhưng không thể được làm cho
sẵn sàng đối với bên ngoài các bức tường của nó.
Trong hầu hết các tình huống, việc cấp phép cho tài
liệu là yếu tố chính gây ảnh hưởng tới các quyền
của cơ chế thành viên và các thực tiễn phát triển
trong các cộng đồng đó. Vấn đề chính với sự hiểu
biết nguồn cộng đồng này là các giấy phép được đề
xuất trong mọi trường hợp là không tương thích với
các yêu cầu của Định nghĩa Nguồn Mở (như được OSI
chỉ đinh), mà trong số những điều khác, nó yêu cầu sự
tự do truy cập tới mã nguồn và phân phối phần mềm
một cách tự do.
Kết luận
Giá
trị của mô hình nguồn cộng đồng trở nên rõ ràng chỉ
bằng việc nhận thức được rằng các tiêu chí cho việc
đánh giá tính hiệu quả của nó là khác với các tiêu
chí được sử dụng để đánh giá sự phát triển của
nguồn mở. Nguồn cộng đồng, như được khai thác trong
tài liệu này, về cơ bản có liên quan tới một giai đoạn
ban đầu của sự cộng tác đóng theo hợp đồng giữa
các cơ quan mà đóng góp các tài nguyên cùng nhau để phát
triển mã theo một tập hợp những yêu cầu được xác
định từ trước. Ngược
lại với điều này (bản
dịch tiếng Việt), trọng tâm trong
nguồn mở là vào các cá nhân được kết nối lỏng lẻo,
những người có thể có hoặc không đại diện cho một
cơ quan, nhưng là tất cả những người chia sẻ nỗ lực
phát triển mã là mở từ ngày đầu tiên, song song với
sự trải nghiệm của việc xây dựng một cộng đồng.
Nhìn từ viễn cảnh này, nguồn cộng đồng là một chất
xúc tác có hiệu quả cho việc phản ánh lên bản chất
tự nhiên sâu hơn của nguồn mở, và vì thế là một
bước hữu dụng hướng tới một sự triển khai các giải
pháp nguồn
mở (bản
dịch tiếng Việt) có đầy đủ
thông tin hơn xuyên khắp các cơ quan giáo dục.
Traditionally,
software is produced and distributed following either closed source
or open source development models. Community source is a development
model that attempts to find a middle way between the two paths by
borrowing elements from both. Community source and open source are
compared in more detail in the Community
source vs open source OSS Watch briefing note. This document
discusses the main features of community source development, and
suggests that, while useful for coordinating contributions across
institutional consortia, the tendency of favouring code over
community could have an impact on the sustainability potential of
this model. At the same time, addressing the inherent tensions of
community source can be a very useful step towards a deeper
understanding of open source and of a more mature implementation of
open development across educational institutions.
In
community source projects, a number of educational partners agree to
contribute financially, or with staff time, to the development of the
software. While access to the code is initially restricted to the
members of the consortium, and staff time is contributed as paid
work, the subsequent opening of the code allows free public access
and individual contributions by globally distributed volunteers. For
this reason, community source is claimed to be a hybrid model, or, to
adapt Eric Raymond’s classic terminology, ‘the pub between the
cathedral and the bazaar’. This model combines closed and open
governance practices, blending elements of closed source development,
in the classic sense of an organisation employing staff and resources
to work on a project, with the openness and non-compulsory nature of
traditional open source projects.
Initially,
the investments of developers’ time, design and project governance
are provided by colleges, universities and commercial firms rather
than by independent developers. These contributions
are made as the first phase of a project, then additional work is
contributed on an ongoing, voluntary basis by individuals and
institutions with a continuing interest in the project. In this way,
it is argued, the project secures the substantial support necessary
during its critical early stages. In exchange for providing the
agreed staff time and resources, the consortium partners are offered
exclusive access to the code, and thus an early opportunity to
influence the development of the software towards their specific
requirements.
Proponents
of community source claim that it provides a hybrid path in terms of
software procurement. The model is often perceived as a bridge
between the revenue-driven corporate world and the less
commercially-oriented Higher Education institutions. IT directors in
the education sector usually need to decide whether an institutional
software solution will be bought or built internally. Community
source allegedly strikes the right balance between buying or building
software to be deployed and maintained institutionally. One
contributes to the development of the code, and one can adapt and use
it for one’s needs, without actually owning the software. Therefore
the community source model is claimed to provide a so-called ‘borrow’
path, which gives the best of both buying and building software.
The
community source model was initiated, and has proved to be
successful, in Higher Education institutions in the US. Its
applicability to other cultural contexts is yet to be demonstrated,
given the global variation of economic and educational environments.
This aspect is acknowledged by the US-based advocates of community
source themselves. Brad Wheeler of Indiana University, for instance,
points out that the US Higher Education funding market, comprised of
many disparate financial sources, often looks ‘chaotic’ to the
Europeans, who have developed an ability to centrally coordinate
educational investments. The community source model may be more
successful in the US precisely because of the highly fragmented
nature of the US academic funding, which requires a proper mechanism
for coordinating investment.
Implementations
of similar projects in Europe and Africa are currently under way.
Examples include development work on Sakai at University of Cambridge
in the UK, and Kuali at Strathmore University in Kenya. Acknowledging
the cross-cultural variation of educational markets is an essential
element in planning the economic and cultural sustainability of such
projects. Their successful deployment outside the US largely depends
on the adjustment of educational funding mechanisms associated with
the community source model to the economic and cultural
particularities of the respective educational consortia.
Some
of the largest projects that start as community source gradually move
towards open source in their later stages. For instance, the Eclipse
project shifted from closed to community source, then gradually
became an open source project. Sakai started life as a community
source consortium, then moved towards open source development. The
Kuali project appears to have taken on board some of the lessons
learnt while developing Sakai, and although it started as a community
source initiative, it has clearly expressed the intention of moving
to an open source model on its path to sustainability.
In
all these examples, community source looks more like a transitional
phase in large cross-institutional collaboration processes, rather
than a software development model on its own. This observation
suggests that the community source model might need to be assessed
against other criteria than those normally employed when evaluating
open source development. Because community source projects tend to
focus more on collaboration between institutions than between
individuals, the relevant criteria for evaluation need to assess
their effectiveness in coordinating economic and administrative
policies, rather than building communities around the development of
shared code.
A
closer look at the transition from initial to later stages of
community source projects like Sakai provides a useful insight into
their development model. The early funding application to the Mellon
Foundation, which bound the four institutional partners (Michigan,
Indiana, MIT and Stanford) together, indicates that the initial focus
of this community source project was not, despite the model’s name,
on community. The Memorandum of Intent signed by the four university
presidents essentially specified economic, legal and administrative
aspects related to the institutional collaboration. According to this
document, a) each institution would provide five developers to the
control of the Sakai Project Board; b) the project was granted use of
specific software (and associated intellectual property) that had
been developed internally at Michigan and Stanford; c) the project
products would be distributed under a BSD-style licence that did not
restrict rights to commercialization; d) the institutions would
implement the Sakai software upon the completion of the project. The
focus, therefore, was less on building a community around the
software code, and more on creating an administrative framework that
allowed the software versions to be produced on time and according to
an agreed list of priorities.
Favouring
code over community is common in the early stages of software
development. However, this attitude reveals a rather limited
understanding of the relationship between these two key elements of
open source development and its role in the long-term sustainability
of a project. A community source project, where access to the code is
initially restricted to a small, named group, can arguably have
reduced management overheads, although this reduction is minimal when
compared to a well-run open source project. However, restricted
access will also limit the scope of contributions and participation
in the project. This is particularly important when we consider that
today’s users are tomorrow’s developers. Understanding the deeper
relationship between developing the code and building the community
is a complex process, which even some projects that declare
themselves open source fail to entirely acknowledge.
In
describing the early stages of the Sakai project, Brad Wheeler
recounts the period when the appointed developers from the partner
institutions struggled to find an efficient way of collaborating with
each other. Key to this process was finding the right balance between
the priorities of their home institutions and the priorities of the
newly created community of developers. That period was crucial for
the project, because it was at that stage that they began to perceive
community building as integral to the process of developing the code.
Developers worked on the software code as specialists commissioned by
their institutions, but at the same time they discovered that they
were also community members in their own right, who were able to
bypass institutional requirements if necessary.
Consequently,
the developers realised that the quality of the code depended to some
extent on the quality of the community that was being formed. This
step in acknowledging the role of community was crucial in moving
towards an open source model, as shown by the subsequent emergence of
typical open source processes - such as the meritocracy that
gradually became effective in influencing decision making within the
community. From this perspective, the most important feature of the
community source model is that it can provide an excellent reflection
tool for reassessing open source development - on the personal,
social and cultural, as well as the economic, legal and
administrative, levels.
An
alternative meaning of the term community source exists, in addition
to the one discussed so far. Some companies, such as Microsoft, use
the term community source to refer to the licensing of the source
code to members of a closed community, who in order to be able to
access it must enter an individual licence agreement with the code
owner. The modified code can be shared within the community, but
cannot be made available outside its walls. In most situations, the
licensing document is the key factor influencing membership rights
and development practices within these communities. The main problem
with this understanding of community source is that the licences
proposed are in all cases incompatible with the requirements of the
Open Source Definition (as specified by the OSI), which amongst other
things requires free access to the source code and free
redistribution of software.
The
value of the community source model becomes apparent only by
acknowledging that the criteria for evaluating its effectiveness are
different from those used to assess traditional open source
development. Community source, as explored in this document,
essentially involves an initial period of closed contractual
collaboration between institutions that pool together resources to
develop code according to a set of predetermined requirements. In
contrast
to this, the focus in open source is on loosely connected
individuals, who may or may not represent an institution, but who all
share the effort of developing code that is open from day one, in
parallel with the experience of building a community. Seen from this
perspective, community source is an effective catalyst for reflecting
upon the deeper nature of open source, and therefore a useful step
towards a more informed implementation of open
source solutions across educational institutions.
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.