Archive for Tháng Chín 2008

Live Mesh và những liên quan bảo mật

Tháng Chín 25, 2008

Quản trị mạngMicrosoft gần đây đã phát hành một bản xem trước về công nghệ dịch vụ mới Live Mesh của họ. Đây là một dịch vụ “điện toán đám mây” mà chúng ta đã đợi từ khi Ray Ozzie nói bóng gió về nó trong một bài phát biểu tại hội thảo của Microsoft vào cuối tháng Ba. Nó cho phép chia sẻ file và đồng bộ giữa các thiết bị PC (thậm chí cả Mac và Windows Mobile). Tuy nhiên với tất cả sự chia sẻ đó thì sự bảo mật đi kèm là gì? Bài viết này chúng tôi sẽ đề cập đến những vấn đề có liên quan đến bảo mật của “điện toán đám mây” nói chung và Live Mesh nói riêng, bên cạnh đó là những cơ chế mà Microsoft đã xây dựng để bảo vệ các thiết bị đã được “mesh” và dữ liệu của bạn.

Cách bảo vệ cho “Đám mây” như thế nào

Trước khi đi sâu vào Live Mesh, chúng ta cần làm sáng tỏ một số câu hỏi về bảo mật của “điện toán đám mây” nói chung. Trong một số báo cáo, các chuyên gia đã nhấn mạnh sự thật rằng, những rủi ro có thể được cải thiện tốt hơn bằng cách chọn đúng nhà cung cấp dịch vụ và thực hiện các bước đối kịp thời với các mối đe dọa.

Tuy nhiên các đặc điểm làm cho “điện toán đám mây” có ưu điểm cũng có thể làm cho nó là trở thành một yếu điểm. Việc tính toán dựa trên đám mây làm cho dữ liệu của bạn và trong nhiều trường hợp cũng như các ứng dụng của bạn, có thể truy cập từ bất cứ nơi đâu trên thế giới – nhưng điều đó cũng có nghĩa rằng, trừ khi bạn có các biện pháp mạnh để bảo mật cho chúng, bằng không điều này lại chính là “lợi bất cập hại” vì ai đó cũng có thể có sự truy cập này ngoài bạn. Trong thực tế, như một số tài liệu đã chỉ ra, bạn thậm chí còn có thể không biết dữ liệu của bạn được lưu ở đâu trên thế giới. Đối với hầu hết các chuyên gia bảo mật thì điều đó quả thực là một vấn đề.

“điện toán đám mây” có thể cũng có một số ưu điểm về bảo mật. Vì dữ liệu của bạn không “sống” trên một máy tính nội bộ nào, nó không bị ảnh hưởng bởi các hội chứng như việc mất laptop vì dữ liệu được lưu trữ cục bộ. Dù các laptop có thể được mã hóa, mã hóa ổ đĩa cứng, được trang bị nhiều phần mềm bảo mật hoặc phần mềm xóa bỏ dữ liệu từ xa – nhưng liệu các nhân viên trong công ty của bạn liệu có thể lúc nào cũng bảo đảm an toàn đúng cách cho các máy tính của họ? Chính vì vậy việc lưu dữ liệu ở một địa điểm nào đó trong “đám mây” có thể tránh được các vấn đề như vậy.

Tuy nhiên, sự lưu trữ tập trung này đôi khi lại có rủi ro do chính nó. Nếu một hacker nào đó truy cập được vào dữ liệu của bạn trên máy chủ của nhà cung cấp của bạn thì hacker này sẽ chiếm được tất cả. Nhưng nếu được triển khai đúng cách, việc lưu trữ kiểu này sẽ cho phép dễ dàng hơn trong việc bảo vệ tất cả dữ liệu trong một địa điểm thay cho thực hiện bảo vệ các file được lưu trên các máy tính khác nhau. Và chi phí cho bảo mật có thể sẽ giảm vì hãng cung cấp sẽ bỏ tiền đầu tư vào các cơ chế bảo mật của họ trên một loạt máy khách.

Tóm lại, khi nói đến bảo mật, “đám mây” có cả những ưu điểm lẫn nhược điểm của nó. Nhiều hay ít phụ thuộc vào cách nó được thực thi như thế nào.

Live Mesh làm việc như thế nào?

Trước khi chúng ta đi sâu vào các khía cạnh công nghệ, các bạn cần lưu ý rằng trong hiện thân hiện hành của nó, Microsoft đang marketing Live Mesh với tư cách là một dịch vụ khách hàng, không phải là một dịch vụ nhắm đến việc kinh doanh. Mặc dù vậy, công ty này đã phát hành rất nhiều sản phẩm và các dịch vụ của nó đối với những khách hàng đầu tiên và nhiều chuyên gia tin tưởng rằng nó có thể và sẽ được mở rộng cho cả lĩnh vực kinh doanh nếu trở lên nổi tiếng.

Vậy những khác biệt cơ bản giữa “đám mây” và “mesh” là gì? Sự khác biệt lớn nhất ở đây là: mesh là một mesh mang tính cá nhân (trái ngược với “đám mây” mà bạn chia sẻ với những người chưa từng được biết). Mesh gồm có các thiết bị khác các thiết bị mà bạn muốn truy cập dữ liệu và các chương trình: cho ví dụ máy trạm tại nhà của bạn, máy trạm đặt tại văn phòng, ; laptop và thiết bị di động (hiện bản preview về công nghệ của Live Mesh chỉ hỗ trợ các máy tính Windows nhưng Microsoft đang lên kế hoạch trong tương lai sẽ hỗ trợ các thiết bị di động Windows và các máy Mac OS X).

Các thông tin của bạn tự động được đồng bộ hóa trên các thiết bị mà bạn gia nhập vào mesh của mình bằng cách cài đặt phần mềm Mesh Operating Environment (MOE). Bạn cũng có thể sử dụng tính năng Live Mesh Remote Desktop để truy cập vào desktop của các máy tính – gồm có các máy tính chạy phiên bản XP Home và Vista Home không hỗ trợ các kết nối Remote Desktop gửi đến. Thêm vào đó, mesh cũng gồm thành phần “đám mây”, Live Desktop dựa trên nền Web để bạn có thể lưu các file (lên đến 5GB) trên các máy chủ của Microsoft.

Microsoft thực hiện những gì để bảo vệ cho mesh?

Đây là một câu hỏi lớn: Bảo mật ở đây là gì? Sự thẩm định Live Mesh được dựa trên Windows Live ID (trước đây được biế đến là Microsoft Passport). Passport được quan niệm như một dịch vụ đăng nhập một lần (single sign-on) cho thương mại điện tử. Vào năm 2007, một lỗ hổng đã được phát hiện trong Live ID, lỗ hổng này cho phép người dùng đăng ký một lỗi hoặc một địa chỉ email không tồn tại với dịch vụ như nó đã được sửa nay sau khi bị phát hiện.

Các tài khoản Live ID có thể được thẩm định theo nhiều cách khác nhau, các cách này gồm có:

  • Username và  password

  • Sự kết hợp Password/PIN

  • Thẻ thông minh Thẻ Cardspace  của WindowsRADIUS (cho việc thẩm định từ điện thoại di động và Xbox)

  • Thẩm định liên đoàn (WS-Trust)

Do hầu hết người dùng Live ID đều phụ thuộc vào phương pháp đầu tiên (ít an toàn nhất) nên sự bảo mật của tài khoản phụ thuộc vào việc chọn một mật khẩu mạnh. Live ID hỗ trợ các mật khẩu có chiều dài (lên đến 16 ký tự) gồm có cả các symbol cũng các ký tự chữ số. khi bạn tạo các thông tin ủy nhiệm của mình, giao diện Live ID sẽ xét và báo cáo về độ dài mật khẩu của bạn.

Live ID phải trải qua việc kiểm định bảo mật định kỳ bởi các nhà thẩm định độc lập. Kim Cameron một chuyên gia về Passport đã gia nhập Microsoft với tư cách là một kiến trúc sư về Identity và Access và đã có nhiều công lao trong việc phát triển Live ID.

Sau khi người dùng hoặc thiết bị được thẩm định, các thẻ Security Assertion Markup Language (SAML) được sử dụng cho việc truy cập tài nguyên trên mesh, SAML chính là một chuẩn dựa trên XML.

Các thẻ được phân biệt bằng một khóa riêng và có thiết lập ngày hết hạn sau một thời gian nào đó. Dịch vụ Live Mesh kiểm tra các thẻ, nếu các thẻ này hợp lệ khi đó sẽ cho phép truy cập. Nhìn chung, sự truy cập được cho phép giữa hai thiết bị nếu thẻ thể hiện rằng cả hai thiết bị thuộc về cùng một người dùng hoặc trong trường hợp các thư mục chia sẻ, nếu thẻ hiển thị rằng cả hai thiết bị đều có cùng thư mục Live Mesh đã được bản đồ hóa.

Lưu lượng giữa máy chủ và máy khách được mã hóa bằng HTTPS. Mã hóa này nhằm tránh một số tình trạng tấn công. Các thiết bị bạn cho gia nhập vào mesh đều phải có khóa riêng của nó. Chỉ máy khách mới được biết khóa riêng này, như vậy lưu lượng không thể bị chặn và đọc trong “đám mây”. Khi bạn kết nối một thiết bị này với một thiết bị khác thông qua mesh, khi đó sự mã hóa bất đối xứng được sử dụng để trao đổi khóa còn dữ liệu và các file được truyền tải bằng cách sử dụng AES 128 bit. Tính nguyên vẹn của dữ liệu được thẩm định thông qua mã thẩm định thông báo (HMAC – Hash Message Authentication Code) có khóa mã, mã này sử dụng một hàm hash với một khóa an toàn.

Các file được lưu trên các máy chủ của Microsoft trong “đám mây” (5GB cho lưu trữ Live Desktop đối với mỗi người dùng) được bảo vệ bằng các điều khiển truy cập nhưng không được mã hóa.

Một vấn đề khác liên quan đến ở đây là tính năng Remote Desktop. Dịch vụ cho phép Remote Desktop, wlcrasvc.exe, được cấu hình khởi chạy hoàn toàn tự động. Nếu bạn kết thúc một quá trình thì một quá trình khác sẽ bắt đầu. Nếu bạn muốn vô hiệu hóa dịch vụ này để tăng độ bảo mật, hãy mở nhắc lệnh với quyền truy cập quản trị viên và đánh net stop wlcrasvc. Bạn cũng có thể vô hiệu hóa dịch vụ trong cột Startup Type trong giao diện điều khiển các dịch vụ.

Cuối cùng: với mục đích như hiện nay – cho phép các khách hàng có thể dễ dàng tích hợp nhiều thiết bị của họ và cung cấp sự truy cập một cách dễ dàng thì sự bảo mật lúc này có thể đủ tốt. Tuy nhiên để trở thành một tùy chọn có thể sống sót đối với thế giới doanh nghiệp, nơi hệ quả của sự thỏa hiệp dữ liệu liên quan chặt chẽ với vấn đề tài chính thì chúng ta cần xem xét đến một tùy chọn “bảo mật cao”.

Phương Nga (Theo WindowSecurity)

Những "lỗ hổng" trong Games

Tháng Chín 25, 2008

Một trong những tiêu chí hàng đầu của các nhà sản xuất hay phát hành Games là mang lại môi trường Game lành mạnh. Song đứng trước những người chơi, những Game thủ vô cùng tinh quái, đôi khi ngay cả “cha đẻ” Games cũng đành “lắc đầu bó tay”.
Lỗi “cố ý” hay “vô tình”

Khi xây dựng một trò chơi, nhất là những Games mang tính cạnh tranh đối kháng cao – thể loại Games ăn khách nhất hiện nay, thì yếu tố cân bằng trong Games luôn được nhà sản xuất hết sức chú trọng. Điều đó đồng nghĩa với việc, mọi người chơi đều được bình đẳng, cùng nhau đứng ngang hàng trong thế giới ảo, tạo nên sức hấp dẫn và lôi cuốn của trò chơi.
Tuy nhiên, cho dù là thế giới thực hay ảo cũng đều không tránh khỏi sự ganh ghét, đố kị, đặc biệt trong những Games Online RPG “cày cuốc”. Game thủ trình độ thấp, hoặc xuất phát chậm hơn nhưng lại luôn có tư tưởng muốn “vượt lên”, “bứt phá” dù cho thành quả đạt được không phải do công sức của mình. Vì vậy, khái niệm Cheats – Bugs và Hack ra đời.
Ngay từ khi chưa có Internet, Cheats đã tồn tại. Nếu bạn là một Gamer 7x, hay 8x đời đầu, cụm từ “Lên lên xuống xuống trái phải trái phải B – A” có lẽ khá quen tai, bởi đó là “Cheat 30 mạng”, một trong những Cheats cơ bản nhất của Games Contra trên máy Nintendo. Vậy Cheats là gì? Đó là những đoạn mã được nhà sản xuất, lập trình cố tình đưa vào Games để hỗ trợ người chơi, tất nhiên là để giúp họ thấy Games “bớt khó” hay có một số Cheats có thể mở những cánh cửa, hay vũ khí bí mật trong Games.
Sự thực là những câu Cheats “mở bản đồ” trong mỗi Games khác nhau như “Iseedeadpeople”, “Reveal Map” hay “Black sheep wall” có thể được các Game thủ kì cựu đọc làu làu mà không hề vấp váp. Tuy vậy, để đảm bảo tính cân bằng của Games, hệ thống Cheats thường không được áp dụng trong chế độ nhiều người chơi (Multiplayers).
Song song với những Cheats “được cố tình tạo ra”, còn có những lỗi tiềm ẩn trong khi lập trình mà chỉ khi bắt đầu chơi Game thủ mới gặp phải. Đây được gọi là các Bugs, những “hạt sạn” mà gần như bất kì trò chơi nào cũng có, dù ít hay nhiều. Bugs rất đa dạng: từ Bugs địa hình khiến người chơi mắc kẹt không lối thoát, hoặc rơi vào những vị trí “đặc biệt” mà bình thường không thể vào được, tới một số loại Bugs nảy sinh khi thực hiện các hoạt động trong Games tạo nên những trạng thái “khác thường”.
Hacker và những điều chưa biết
Nổi cộm và nhức nhối nhất trong “những nẻo đường tà” của thế giới Games vẫn là vấn đề xoay quanh chữ “Hack”. Khi nhắc đến Hack, có nghĩa là nhắc đến sự tồn tại của Hacker – những người thực hiện “điều xấu”. Chúng ta thường đánh đồng các dạng Hacker, song trên thực tế tồn tại 2 nhóm riêng biệt: Hacker thứ thiệt, và người sử dụng công cụ Hack để trục lợi.
Hacker thứ thiệt là những người có tài thực sự, tác động bằng phần mềm hay phần cứng, vào các máy trạm, đôi khi là cả máy chủ Game với những đoạn mã độc, chiếm quyền kiểm soát và có thể tạo nên những “siêu nhân” thực thụ trong Game với khả năng siêu phàm khác người.
“Hack” rất đa dạng, có thể kể tên như: Hack Perfect, Hack Speed, Hack Item, Hack level, Hack Map,… Ngay cả những chương trình tự động chơi Game như Auto, Bot cũng được xếp vào dạng “Hack” vì chúng là những chương trình thứ 3 (Third Party Programs) tác động gây mất cân bằng Game.
Đương nhiên “Hack” là một hành động không hay, đáng bị lên án, thậm chí Hacker còn có thể bị truy tố trước pháp luật vì tội “phá hoại”. Song những Hacker thực thụ lại là những người có trình độ, nếu họ hợp tác với nhà phát triển Games để “vá” các lỗi, điều đó lại rất đáng hoan nghênh.
Một ví dụ điển hình khác mà chúng ta thường hay nhắc tới đó là việc “ăn cắp mật khẩu” bằng các chương trình lưu lại hoạt động bàn phím “keylogger” mà đến nay vẫn còn nhức nhối. Hay bên cạnh đó là những Game thủ “choai choai” Hack Speed mà không hay biết hậu quả. Chính những kẻ phát tán, sử dụng chương trình Hack của người khác làm ra, lấy sự phá hoại cộng đồng và môi trường Games trong sạch làm thú vui, đó mới là tác nhân xấu cần phải loại bỏ.
Ngoài Bugs và Hack, trong thế giới GamesOnline còn tồn tại một bộ phận “người xấu” với tên Scammer (kẻ lừa đảo). Chúng thường sử dụng mánh khóe lừa đảo, dựa vào sự cả tin hay tâm lí của người chơi để trục lợi. Chúng không phải là Hacker, mà chỉ là những kẻ lợi dụng, gây tiếng xấu cho Games, làm cho những người chưa hiểu rõ có ấn tượng xấu đối với Games. Song chúng ta cũng nên thông cảm với những người mới vì không phải ai cũng nhận ra một điều “Phá thì dễ, làm mới khó!”.
Biện pháp nào để ngăn chặn?
Đương nhiên, các nhà sản xuất Games sau khi được thông báo sẽ “vá” ngay những lỗ hổng lập trình này và đưa ra các bản Patch, Update để cập nhật và sửa lỗi. Còn về phía nhà phát hành, họ thường khuyến khích Game thủ tự mình phát hiện các Bugs và thông báo để có những chỉnh sửa kịp thời, hợp lí giúp Game hoàn thiện hơn. Đồng thời kêu gọi cộng đồng cùng xây dựng một môi trường game lành mạnh.
Tuy vậy, đối với những kẻ lợi dụng Bugs hay sử dụng chương trình Hack, không có cách nào khác để xử lí ngoài việc mạnh tay răn đe. Theo thông tin mới đây, Thanh tra bộ Thông tin và Truyền thông sẽ thanh tra việc sử dụng phần mềm gây hại, phần mềm làm công cụ hack game vào nội dung thanh tra của mình. Với sự ra tay của cơ quan có thẩm quyền, các gian lận hay Hack hi vọng sẽ sớm thuyên giảm.
Dù đã có nhiều cố gắng từ nhiều phía, có sự liên kết giữa nhà phát hành với người chơi, với các cửa hàng game, sự liên kết giữa các nhà phát hành, nhưng để thực sự có một môi trường lành mạnh, điều đó phụ thuộc vào phần lớn ý thức của chính các game thủ, những người được quyền chơi công bằng. 

Theo ThanhTD (Báo Thể thao 24h)

Cách phát hiện người invisible trong yahoo

Tháng Chín 25, 2008

Có nhiều cách để bạn kiểm tra 1 người có online hay đang invisible như dùng phần mềm, trang web… Nhưng việc tìm ra 1 cách tiện với mình nhất là yêu cầu cần thiết trong cuộc sống. Đối với mình cũng vậy.
– Đầu tiên bạn vào yahoo của mình, chọn vào nick mà bạn cần biết có online hay không, (chẳng hạn như người yêu chẳng hạn)
– Tiếp theo bạn nhấn chuột phải chọn More Action -> Invite to Conference

– Sau khi bạn chọn nó sẽ hiện ra một khung, bạn nhấn vào Invite

– Sau khi nhấn Invite bạn sẽ thấy một khung khác. 

– Bên Victim nếu có online sẽ hiện lên bảng thông báo Join, Decline, Close. Tất nhiên không online sẽ không có.

– Nếu Victim có online mà invisible khi thấy bảng, sẽ nhấn vào Join, Decline hoặc Close.
– Khi Victim nhấn vào Join tức là đồng ý trò chuyện với bạn “Online nha khỏi trốn
– Còn nếu Victim nhấn vào Decline hay Close thì bên bạn sẽ thấy câu ****has Declined to Join (*** là nick của Victim). 

– Nếu Victim không online thì bạn sẽ không thấy hiện lên câu ****has declined to join
Nếu bạn không muốn dùng cách này thì có thể dùng các trang web để phát hiện như:

Bạn đọc gửi: Nguyen Phu Quy (nguyenphuquy85@..)

8 tuyệt chiêu tăng tốc Firefox

Tháng Chín 25, 2008

Chỉ cần chưa đến 5 phút và một trình độ tin học tối thiểu, bạn cũng có thể khiến cho “cáo lửa” chạy nhanh gấp 2 lần so với trước kia.
Firefox đang ngày càng thắng thế so với Internet Explorer trên hầu hết các lĩnh vực. Kể cả với nhóm người dùng “ngại thay đổi” nhất là giới nhân viên văn phòng người ta cũng thấy đang có xu hướng chuyển sang dùng Firefox một cách mạnh mẽ.
So với các thế hệ trước, Firefox 3 đã nhanh hơn trước khá nhiều nhưng nếu như biết “vọc” một chút bạn vẫn có thể khiến cho tốc độ của trình duyệt này nhanh gấp đôi chỉ trong 5 phút và chi phí là… không gì cả. ICTnews xin giới thiệu 8 tuyệt chiêu dễ thực hiện nhất.
1. Kích hoạt kênh liên lạc đặc quyền
Hầu hết các trình duyệt đều làm việc theo cơ chế rất “lịch sự”: gửi yêu cầu đến máy chủ và đứng chờ sự đồng ý trước khi tiếp tục công việc. Tuy nhiên thao tác này lại khiến người dùng mất nhiều thời gian hơn. Kích hoạt kênh liên lạc đặc quyền là thủ thuật giúp trình duyệt gửi nhiều yêu cầu cùng một lúc đến máy chủ và giảm thời gian download trang. Để làm công việc này, đầu tiên bạn hãy mở Firefox lên, gõ about:config vào thanh địa chỉ. Firefox sẽ đưa ra cảnh báo nhưng hãy yên tâm bấm vào nút “I’ll be careful, I promise” để tiếp tục.
Click đúp chuột vào các dòng lệnh: network.http.pipelining và network.http.proxy.pipelining để đưa giá trị của các lệnh này về “true”. Tiếp theo, kích đúp vào dòng lệnh: network.http.pipelining.maxrequests và sửa giá trị trong ô hiện ra thành 8.
Đôi khi bạn sẽ gặp phải những máy chủ “khó tính” không cho phép bạn tải trang nếu nhận được nhiều hơn 1 request (yêu cầu). Hãy đưa giá trị tại các dòng lệnh trên về “false” (bấm đúp chuột lần nữa).
2. Phản hồi nhanh
Một số trang web có dung lượng lớn và cấu trúc phức tạp thường tốn nhiều thời gian tải hơn bình thường. Để người dùng đỡ sốt ruột, Firefox có chế độ hiển thị những gì nó đã nhận được trong mỗi 0,12 giây nhưng chính việc này lại khiến tổng thời gian tải trang nhiều hơn. Giảm bớt số lần hiển thị tạm này sẽ giúp cho Firefox hoạt động nhanh hơn. Cách làm như sau:
Nhập about:config vào thanh địa chỉ. Bấm chuột phải vào bất kỳ đâu trong cửa sổ hiện ra (bấm Ctrl + click nếu bạn đang dùng máy tính Mac) chọn New > Integer. Nhập content.notify.interval trong ô hiện ra và bấm OK. Tiếp tục nhập giá trị 500000 (chú ý: 5 số 0)
Bước thứ 2: bấm chuột phải lần nữa, chọn New > Boolean. Nhập tên cho dòng lệnh là: content.notify.ontimer và chọn giá trị “true”.
3. Tải trang nhanh hơn
Nếu bạn không di chuyển chuột hoặc chạm vào bàn phím trong khoảng ít nhất là 0,75 giây (đây gọi là ngưỡng chuyển đổi nội dung), Firefox sẽ tự động chuyển sang chế độ ít gián đoạn. Điều này đồng nghĩa với việc giao diện của Firefox sẽ phản ứng chậm chạp hơn nhưng quá trình tải trang lại nhanh hơn.
Nhưng nếu 0,75 giây vẫn là lâu, bạn có thể đặt cho nó một giá trị khác (0,25 giây chẳng hạn). Cách làm như sau: gõ about:config > OK. Bấm phải chuột vào bên trong cửa số và chọn New > Integer. Đặt tên cho lệnh này là: content.switch.threshold bấm OK > điền 250000 vào ô giá trị. OK lần nữa để hoàn tất quá trình.
4. Không gián đoạn
Bạn cũng có thể khiến Firefox hoạt động nhanh hơn nữa giống như trên nhưng bằng một thủ thuật khác. Lần này là yêu cầu Firefox tải về toàn bộ trang. Hãy thử và cảm nhận.
Vẫn tiếp tục nhập about:config vào thanh địa chỉ. Bấm phải chuột và chọn New > Boolean. Đặt tên lệnh là: content.interrupt.parsing > OK > đặt giá trị là False > OK lần nữa để kết thúc.
5. Chặn các flash

Flash là thành phần gần như trang web nào cũng có. Chúng là công cụ quảng cáo hay trang điểm cho website là chính nhưng lại khiến công việc của chúng ta chậm chạp đi. Có một giải pháp rất đơn giản giúp xóa đi sự phiền hà này: tải về và cài đặt chương trình Flashblock (tại địa chỉ: flashblock.mozdev.org).
Nhưng đôi khi bạn vẫn muốn xem một đoạn flash nào đó thì sao? Chỉ việc bấm vào biểu tượng của chương trình và tải đoạn flash mà bạn muốn rồi xem như bình thường.
6. Tăng dung lượng bộ nhớ đệm

Nếu chiếc PC của bạn có bộ nhớ RAM lớn (từ 2 GB trở lên) hãy mở rộng bộ nhớ đệm cho Firefox để những lần sau lướt web nhanh hơn.
Nhập about:config > OK. Bấm chuột phải rồi chọn New > Integer > đặt tên: browser.cache.memory.capacity > OK > nhập giá trị 65536 > OK. Khởi động lại Firefox để kích hoạt bộ nhớ mới.
7. Kích hoạt TraceMonkey

TraceMonkey là tính năng mà Mozilla mới phát triển cho phép chuyển đổi các đoạn mã Javascript tốc độ chậm thành các đoạn mã x86 siêu tốc. Tính năng thực chất vẫn chưa chính thức được áp dụng trong Firefox vì Mozilla vẫn đang thử nghiệm nhưng nếu bạn là người thích khám phá cái mới và đi trước người khác thì cũng nên thử một lần cho biết.
Tải tính năng mới này tại địa chỉ: ftp://ftp.mozilla.org/pub/firefox/nightly/latest-trunk/. Cài đặt chương trình sau đó nhập about:config vào thanh địa chỉ > OK. Nhập JIT vào ô filer box. Kích đúp chuột vào các dòng lệnh: javascript.options.jit.chromejavascript.options.jit.content để đưa giá trị của chúng về “True”. Bây giờ bạn đã có thể tận hưởng cỗ máy Javascript tân tiến nhất của Firefox.
8. Nén dữ liệu
Nếu bạn có một đường truyền tốc độ chậm khiến Firefox chẳng mấy khi hoạt động “ngon lành” hãy thử dùng sự hỗ trợ của một ứng dụng có tên là toonel.net (tải về tại trang toonel.net). Đây là một ứng dụng Java tự động chuyển băng thông của bạn về server của nhà sản xuất toonel.net, nén toàn bộ dữ liệu lại và sau đó trả về cho bạn. Ứng dụng này khá hữu ích với những người đang dùng thuê bao Internet theo dung lượng vì dữ liệu tải về sẽ ít hơn và tốc độ tải trang vì thế cũng nhanh hơn giúp bạn tiết kiệm chi phí hàng tháng.
Điều cần lưu ý duy nhất khi sử dụng chương trình này là nó sẽ nén cả những bức ảnh có định dạng JPEG khiến ảnh có chất lượng thấp hơn và xấu hơn.

Theo Lương Hương – ICTNews (PC Pro)

Riêng Tư: Mục tiêu

Tháng Chín 25, 2008

Đây là nội dung riêng tư. Cần phải nhập mật khẩu để xem tiếp:

Lập trình web và các khái niệm

Tháng Chín 23, 2008

Cùng với sự phát triển của CNTT cũng như Internet, việc phát triển các ứng dụng trên một máy đơn cũng đã mang lại nhiều lợi ích và được áp dụng trong nhiều lĩnh vực của đời sống. Tuy nhiên, với sự gia tăng phát triển của ngành công nghiệp máy tính, xu hướng toàn cầu hoá nhất hiện nay, tin học phải mở rộng hơn để có thể khai thác nguồn tài nguyên Internet

Trong mỗi doanh nghiệp việc phát triển các ứng dụng quản lý trên mạng càng có ý nghĩa hơn khi các mạng LAN hay WAN bùng nổ và ngày càng phổ biến. Các ứng dụng đó đảm bảo tính truy nhập tương tác từ nhiều phía và tài nguyên chỉ đặt một nơi mà ta gọi là server. Như thế các mạng sẽ mang lại cho chúng ta những lợi nhuận đáng kể. Và thực tế đã chứng tỏ điều đó, các ứng dụng đều hướng tới mạng và Internet, từ kinh doanh trên Internet, quảng cáo, hệ thống thư điện tử, cũng như thương mại điện tử. Các khái niệm đó đang gần gũi với chúng ta hơn.
Bài viết giới thiệu với các bạn một số khái niệm có liên quan đến lập trình Web. Đó là những khái niệm thường gặp khi làm việc với môi trường mạng và đó cũng là những nét đặc trưng khác biệt mà các bạn ít gặp khi lập trình trên các ứng dụng đơn lẻ.
1. URL
URL (Uniform Resource Locator) dùng để chỉ tài nguyên trên Internet. Sức mạnh của web là khả năng tạo ra những liên kết siêu văn bản đến các thông tin liên quan. Những thông tin này có thì là những trang web khác, những hình ảnh, âm thanh… Những liên kết này thường được biểu diễn bầng những chữ màu xanh có gạch dưới được gọi là anchor.
Các URL có thể được truy xuất thông qua một trình duyệt (Browser) như IE hay Netscape.
Ví dụ: Một URL có dạng http://www.hcmut.edu.vn/index.html
Trong đó: http: là giao thức
http://www.hcmut.edu.vn/ là địa chỉ máy chứa tài nguyên.
index.html là tên đường dẫn trên máy chứa tài nguyên.
Nhờ địa chỉ url mà ta có thể từ bất kỳ một máy nào trong mạng Internet truy nhập tới các trang web ở các website khác nhau.
2.Web Server/mail Server và hoạt động của browser WWW (World Wide Web)
Hoạt động truy xuất WWW giữa máy khách và web server theo cơ chế sau:
Server ứng dụng cung cấp dữ liệu mà người sử dụng cần đến hoặc trao đổi. Chỉ những người sử dụng đã đăng ký account mới được cấp web site chứa dữ liệu riêng của mình trên server này, mọi người sử dụng đều có thể truy xuất các URL được phép dùng chung trong server này.
Trước tiên trình duyệt thực hiện kết nối để nhận được program/server. Browser dùng địa chỉ miền tên như số điện thoại hay địa chỉ để đạt tới server.
Browser tìm địa chỉ tên miền – thông tin đi ngay sau http:// như trong http://www.hcmut.edu.vn/ ví dụ trên, trong đó http://www.hcmut.edu.vn/ là địa chỉ miền tên (cũng là địa chỉ máy chứa tài nguyên).
Sau đó browser sẽ gửi request header sau tới miền xác định:
* Một request header xác định file hay dịch vụ đang được request.
* Các fields request header, xác định browser.
* Thông tin đặc biệt thêm vào request.
* Bất kỳ dữ liệu nào đi cùng với request.
Tất cả những thông tin đó được gọi là request header HTTP. Chúng xác định đối với server thông tin căn bản mà client đang request và loại đáp ứng có thể được client chấp nhận. Scrver cũng lấy tất cả các header do client gửi tới thông qua biến môi trường (environments variables) để chương trình server xử lý. Server đáp ứng với response header. Header đáp ứng đầu tiên là dòng trạng thái cho client biết kết quả của việc tìm kiếm request url. Nếu trạng thái là thành công (Success) thì nội dung của request url được gửi trả lại client/browser và hiển thị trên màn hình máy tính của client.
3. HTML và Web page
Ngôn ngữ siêu văn bản (Hyper Text Markup Language) là một ngôn ngữ dùng để tạo trang web, chứa các trang văn bản và những tag (thẻ) định dạng báo cho web browser biết làm thế nào thông dịch và thể hiện trang web trên màn hình.
Web page là trang văn bản thô (text only), nhưng về mặt ngữ nghĩa gồm 2 nội dung:
– Đoạn văn bản cụ thể.
– Các tag (trường văn bản được viết theo qui định) miêu tả một hành vi nào đó, thường là một mối liên kết (hyperlink) đến trang web khác.
4. E-mail
– e-mail (electronic mail – thư điện tử) là hình thức gửi thông điệp (messages) ở dạng điện tử từ máy này sang máy khác trong mạng.
– Format của một e-mail:
Dạng format một e-mail cơ bản gồm hai thành phần: header + body:
+ header: chứa các hàng text kiểm soát e-mail.
+ body: nội dung cụ thể của e-mail.
Phần header gồm các nội dung cụ thể sau:
To: địa chỉ người nhận e-mail
Cc: địa chỉ người nhận cộng thêm
Bcc: địa chỉ những người nhận cộng thêm
From: thông tin về người gửi e-mail (địa chỉ)
Sender: địa chỉ người trực tiếp gửi e-mail
Rcceived: danh sách các Mail- Server trung chuyển
Return path: đường dẫn ngược trở lại Received
Date: ngày giờ gửi nhận e-mail
Reply to: địa chỉ hồi âm
Message: chỉ số nhận dạng e- mail
In Reply to: chỉ số nhận dạng e-mail này quay trở lại
Referece: những chỉ số e-mail tham khảo khác
Keywords: các keywords chính về nội dung
Subject: chủ đề chính của e-mail.
– Để nới rộng thêm ra ngoài văn bản thô người ta thêm vào các field kiểm soát gọi là MIME nới rộng sau:
Mime-Version: chỉ số version của MIME
Content-Description: chú thích về nội dung e-mail
Content-Id: chỉ số duy nhất
Content-Transfer-Encoding: cách thức mã hóa nội dung e-mail
Text: Text Only
Image : ảnh dạng .GIF, .JPEG
Audio: âm thanh WAVE
Video: Film Mfeg/chương trình bất kỳ (Octet-stream)
Application: Post Scripts chương trình dàn trang.
Chú ý: Các thông tin về phần header của e-mail trình bày ở đây rất cần để xử lý mail.

5. Lập trình CGI
– CGI (viết tắt của Common Gateway Interface) là một phương pháp cho phép giao tiếp giữa server và chương trình nhờ các định dạng đặc tả thông tin.
– Lập trình CGI cho phép viết chương trình nhận lệnh khởi đầu từ trang web, trang web dùng định dạng HTML để khởi tạo chương trình. Định dạng HTML trở thành phương pháp được chọn để gửi dữ liệu qua mạng vì dễ thiết lập một giao diện người sử dụng HTML định dạng và thẻ Input.
– Chương trình CGI chạy dưới biến môi trường duy nhất. Khi WWW khởi tạo chương trình CGI nó tạo ra một số thông tin đặc biệt cho chương trình và đáp ứng trở lại từ chương trình CGI. Trước khi chương trình CGI được khởi tạo, server WWW đã tạo ra một môi trường xử lý đặc biệt, môi trường này chứa các dữ liệu từ HTTP request header truyền đến. Sau đó server xác định loại file chương trình cần thực thi.
– Nói tóm lại lập trình CGI là viết chương trình nhận và truyền dữ liệu qua Internet tới WWW server. Chương trình CGI sử dụng dữ liệu đó và gửi đáp ứng HTML trở lại máy khách.
– Vai trò của HTML rất quan trọng trong lập trình CGI. Chương trình CGI được gọi qua một tag định dạng HTML chẳng hạn:
<a href=”index.cgi”Mục lục</a>
trong thông qua tag <a> ..</a> chương trình index.cgi sẽ được thực hiện.
– Dùng thuộc tính HTML định dạng method:
Form tag bắt đầu với một thuộc tính Method để báo cho browser biết cách thức mã hoá dữ liệu và nơi đặt dữ liệu chuyển tới server, nó được dùng để định nghĩa phần gì của file HTML được sử dụng cho người sử dụng input.
Cú pháp: <form method=[post/get] action=”URL” enctype=..>
Thêm vào input tag cho định dạng HTML này ta được một active form:
<input type=”Submit”>
– Input tag:
Có thể tạo input text, radio buttons, check boxes và một số loại khác.
Cú pháp: <Input type=[text/radio…] value=”…” size=”…” maxlength=…>
– Submit button:
Với tag _<input type=”submit”…> dùng để kích khởi gửi dữ liệu.
CGI và tag FORM trong HTML phối hợp với nhau tạo ra submit button dùng để kích hoạt chương trình CGI trên server cùng với các phương pháp.
– Method GET và POST:
Có 2 cách thức cho phép dữ liệu được chuyển tới chương trình CGI trên server.
GET gửi dữ liệu với mã URI header (Uniform Resource Identifier), dùng với HTML định dạng tag ở dạng sau:
<Form method=”get” action=”A CGI program”
Mã hoá URI dữ liệu và bất kỳ thông tin đường dẫn nào đều được đặt vào biến môi trường Querystring và path-info.
POST cũng mã hoá dữ liệu URI, tuy nhiên nó gửi dữ liệu sau khi tất cả các request header đã được gửi tới server. Phương án GET chuyển chuỗi mã hoá URI qua biến môi trường Querystring, còn method Post chuyển dữ liệu này qua STDIN.
Kích thước dữ liệu theo phương án GET bị hạn chế bởi không gian biến môi trường được sử dụng trong khi đó POST không bị giới hạn về kích thước lượng thông tin gửi đi.
Để xác định phương pháp nào được sử dụng, chương trình CGI kiểm tra biến Requestmethod, nếu là POST thì dữ liệu mã hoá sẽ được lưu vào biến Content-length.
Hàm ReadParse sau sẽ giải quyết vấn đề decoding dữ liệu (hàm này nằm trong hàm thư viện mở cgi-lib.pl).
– ứng dụng của lập trình CGI:
Chương trình CGI có thể hiện thực trên nhiều platform cho nhiều ứng dụng khác nhau như:
+ Tạo form, xử lý định dạng.
+ Tạo các đối tượng động trên một trang web.
+ Xử lý imagemaps.
+ Tìm kiếm trên web.
+ Tạo các tài liệu độc lập với platform.
+ Tạo các ứng dụng như: chat rooms, voting booths hay bất cứ kiểu giao tiếp nào (Interactive).
+ Phát sinh động và update các trang web đó.
– Tạo tài liệu theo đặc tả cho mỗi người sử dụng.
– Hạn chế của lập trình CGI:
Thường không dùng CGI cho các vấn đề:
+ Tạo các multi-player games.
+ Tạo stock ticket được update qua trang web.
+ Tạo stock ticket được update qua trang web.
+ Tạo các ứng dụng thời gian thực nhúng trong trang web.
Nói chung, nếu các tài liệu không thay đổi sau khi nó được phát sinh thì thay cho dùng CGI, ta cần dùng ActiveScripts Và Java.
– Cơ chế hoạt động của CGI:
+ Browser của máy khách chuyển encode dữ liệu input đối với web server.
+ Server chuyển input tới chương trình CGI trên server.
+ CGI xử lý input, chuyển nó tới ứng dụng khác (nếu cần) rồi gửi output cho web server.
+ Webserver gửi output do CGI đã xử lý cho browser của máy khách và thể hiện kết quả trên trang web.
6. PERL – ngôn ngữ lập trình cho CGI
– Có thể dùng nhiều ngôn ngữ lập trình khác nhau trên CGI:
Bourne shell; C shell; C/C++; Perl; Python; Visual basic; JavaScripts.
– Ngôn ngữ lập trình PERL (viết tắt của Practical Extraction and Report Languages) do Larry Wall xây dựng được dùng là một công cụ lập trình trên web vì Perl có nhiều ưu điểm:
+ Perl có sức mạnh và sự linh hoạt của ngôn ngữ lập trình cấp cao C.
+ Giống như các ngôn ngữ shell scripts, Perl không đòi hỏi biên dịch và link mã nguồn, thay vào đó chỉ cần gọi Perl thực thi chương trình đó.
+ Chạy được trên nhiều platfrom: UNIX, DOS, WINDOWS.
+ Perl chuyên về xử lý text, có nhiều hàm build-in, thích hợp với xử lý trang web trong thế giới WWW.
Ngoài ra Perl còn rất nhiều điểm mạnh như của các ngôn ngữ lập trình khác.
7. SQUID và WEBMIN
SQUID:
Squid là một proxy caching server cao cấp cho web máy khách, trợ giúp FTP, gopher, HTTP dữ liệu objects. Không giống như các caching software khác, Squid xử lý mọi request bằng quá trình đơn, non-blocking.
Squit chứa chương trình server chính là squid, một chương trình tìm kiếm hệ thống tên miền dnsserver (DNS – Domain Name System), một số chương trình và công cụ quản lý máy khách khác.
WEBMIN:
Webmin là một phần mềm quản trị trên UNIX thông qua web. Webmin có cấu trúc module mở và được cài đặt trên máy có cấu hình thấp, biến nó thành miniserver rất hữu dụng.
Webmin phát hành phiên bản đầu tiên (ver 0.1) ngày 05/10/1997 và phiên bản được sử dụng ở đây là ver 0.72.
Webmin được thiết kế cho phép dễ dàng thêm vào các module mới mà không làm thay đổi bất kỳ mã nguồn nào đã có.
8. Web Server Log Files và thông tin về người sử dụng dịch vụ web
Để quản lý các khách hàng trong dịch vụ của mình, người quản trị cần biết các thông tin về người sử dụng đã sử dụng các dịch vụ Internet thế nào: Số lần request, khối lượng, loại dịch vụ (HTTP, Email), thời gian sử dụng bao lâu và nhiều thông tin liên quan khác. Lấy các thông tin này từ đâu và xử lý nó thế nào? WWW server sẽ ghi lại thông tin về request của người sử dụng đó vào một file gọi là log file. Chẳng hạn như ta muốn tìm các thông tin về những người tới site của mình, dịch vụ HTTP (Hyper Text Transfer Protocol) cho phép giao tiếp giữa browser và web server qua một loạt các kết nối rời rạc để lấy text trên web page và thể hiện chúng, mỗi một lần request được thực hiện thì một bản ghi cho lần request đó được ghi vào một file log. Các request về web được http ghi vào file access_log còn e-mail được ghi vào file syslog trên UNIX.
Tuỳ thuộc vào từng loại mạng và server mà cấu trúc file log có thể khác nhau ở một vài điểm nhưng nhìn chung thông tin ghi lại đều phản ánh tên người sử dụng, ngày giờ sử dụng dịch vụ, khối lượng request và nhiều thông tin khác.
Dựa vào các fields của file log này người quản trị có thể thực hiện các thao tác monitor để quản lý khách hàng của mình.

Theo VNPT

Common Gateway Interface

Tháng Chín 23, 2008

CWorld VN 10/99

Định nghĩa: Common Gateway Interface (CGI) là chuẩn để kết nối chương trình ứng dụng với Web server. Dữ liệu từ bảng biểu do người dùng điền vào trên trang Web được chuyển cho ứng dụng CGI, ứng dụng này sau đó sẽ gửi trả nội dung Web được tạo ra theo yêu cầu ngược về cho trình duyệt của người dùng.

    Khi được phát triển lần đầu tiên cách đây một thập kỷ, World Wide Web được thiết kế để hiển thị tài liệu. Tuy nhiên, ngay từ lúc khởi đầu, các nhà phát triển Web site đã muốn có một cách thức để gửi dữ liệu từ trình duyệt của người dùng lên Web server, chẳng hạn tên, mật mã người dùng hay yêu cầu tìm kiếm.

    CGI mang lại một phương thức chuẩn hoá để thực hiện những khả năng này. Khi người dùng gõ dữ liệu vào bảng biểu trên trang Web, nội dung này sẽ được gửi về cho Web server và thông qua giao tiếp CGI để đưa đến những chương trình riêng biệt xử lý.

    Chương trình CGI sau đó có thể gửi ngược về cho trình duyệt của người dùng trang Web hiện có, trang Web mới được sinh ra trong quá trình xử lý, hình ảnh hay bất kỳ loại thông tin nào khác có thể hiển thị được trên trình duyệt.

    Vì CGI hết sức linh động nên hầu như bất kỳ chương trình nào có thể chạy trên máy chủ Web và chấp nhận dữ liệu theo kiểu dòng lệnh như những chương trình được viết bằng C, C++, Perl, Visual Basic và thậm chí một số ngôn ngữ kiểu dòng lệnh của Unix – đều có thể dùng được với CGI.

    Một trong những tồn tại lớn nhất của CGI là nó nạp một chương trình mới mỗi khi người dùng nhấn vào bảng biểu, vì thế những máy chủ Web dùng cho site có dòng lưu chuyển dữ liệu lớn có thể chạy hàng ngàn chương trình cùng lúc – một gánh nặng cho tốc độ của Web site.

Những chương trình chuyên biệt

    Người dùng thường phàn nàn những chương trình được viết cho CGI không thể dùng lại được khi Web site thay đổi vì chúng thường rất chuyên dụng. Kết quả là trong một số năm qua, nhiều Web site lớn đã từ bỏ CGI để đi theo các máy chủ ứng dụng. Tương tự các chương trình CGI, máy chủ ứng dụng chấp nhận nhập liệu từ phía người dùng và gửi ngược lại các trang Web hay thông tin khác. Điều khác biệt là máy chủ ứng dụng xử lý nhập liệu của nhiều người dùng chỉ bằng một chương trình, do đó cải thiện tốc độ rất nhiều.

Hết sức thích hợp

    Điều này không có nghĩa máy chủ ứng dụng sẽ thích hợp cho tất cả mọi người. CGI rất phù hợp với các mạng nội bộ, nơi thường có lưu lượng thông tin ít hơn những site bên ngoài. Hơn nữa, kinh phí của các phòng ban thường không chấp nhận mức giá 15.000 – 100.000 USD của máy chủ ứng dụng, trong khi CGI thì được thiết kế sẵn trong các máy chủ Web.

    Chương trình CGI có thể được viết bằng bất kỳ ngôn ngữ nào và giao tiếp CGI cũng hết sức đơn giản, vì thế các nhà phát triển Web có thể nhanh chóng kết hợp những tiện ích CGI đơn giản với nhau. Tất cả những điều này làm cho CGI trở thành công cụ thực dụng cho những tiện ích và sửa đổi mang tính tức thời nhưng không thể dùng được trên những Web site thương mại đòi hỏi cao. CGI vẫn có vai trò hết sức quan trọng nhưng ngày càng có nhiều phương thức khác uyển chuyển hơn, hoàn thiện hơn để tích hợp với những hệ thống khác.

Những chọn lựa khác

    Cùng với máy chủ ứng dụng, những phương thức khác này bao gồm Active Server Pages – loại server ứng dụng tổng quát được thiết kế sẵn trong Internet Information Server Web server – và Java Servlet là những chương trình Java nhỏ chạy trên server.

    CGI vẫn có tác dụng trong những công việc nhất định, ngay cả với các site đã chuyển sang dùng những công cụ mạnh hơn thì có lúc vẫn cần đến CGI.

Computerworld 1999

LGPL

Tháng Chín 22, 2008
Văn thư lưu trữ mở Wikisource

Bước tới: chuyển hướng, tìm kiếm

Mục lục

[ẩn]

[sửa] GLPL — GNU Lesser General Public License

[sửa] Xem

[sửa] Giấy phép Công cộng Phụ GNU

Phiên bản 2.1, Tháng 6/1999

Translated/Dịch: 2007-06-29
Translator/Dịch giả: Clytie Siddall <clytie@riverland.net.au>
Reviewer/Biên tập viên: Trần Thế Trung <tttrung@hotmail.com>

This is an unofficial translation of the GNU Lesser General Public License into Vietnamese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU LGPL–only the original English text of the GNU LGPL does that. However, we hope that this translation will help Vietnamese speakers understand the GNU LGPL better.

Đây là một bản dịch tiếng Việt không chính thức của Giấy phép Công cộng Phụ GNU (LGPL). Nó không được xuất bản bởi Tổ Chức Phần Mềm Tự Do, và không tuyên bố một cách hợp pháp các điều kiện phát hành phần mềm sử dụng LGPL — chỉ có bản tiếng Anh gốc của LGPL là hợp pháp. Tuy nhiên, chúng tôi mong muốn bản dịch này sẽ giúp đỡ người nói tiếng Việt hiểu khá hơn LGPL.

Tác quyền © năm 1991, 1999 của Tổ chức Phần mềm Tự do.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (Mỹ)

Mọi người đều đuợc quyền sao chép và phân phối nguyên văn tài liệu giấy phép này, nhưng không được phép thay đổi nó.

[Đây là phiên bản đã phát hành thứ nhất của Giấy phép Công cộng Phụ GNU. Nó cũng thừa tự Giấy phép Công cộng Thư viện GNU, phiên bản 2, thì số hiệu phiên bản 2.1.]

[sửa] Lời mở đầu

Giấy phép sử dụng của hầu hết các phần mềm được thiết kế để bạn không được tự do chia sẻ và thay đổi phần mềm đó. Trái lại, các Giấy phép Công cộng GNU dự định đảm bảo cho bạn được tự do chia sẻ và thay đổi phần mềm một cách tự do, và đảm bảo phần mềm tự do cho mọi người sử dụng.

Giấy phép này, Giấy phép Công cộng Phụ, áp dụng cho một số gói phần mềm đã chỉ rõ đặc biệt — thường thư viện — của Tổ chức Phần mềm Tự do và các tác giả khác chọn sử dụng nó. Bạn cũng có thể sử dụng nó, nhưng trước tiên đề nghị bạn nghĩ cẩn thận nếu giấy phép này hay Giấy phép Công cộng chuẩn là chiến lược tốt hơn trong trường hợp riêng nào, dựa vào các lời giải thích bên dưới.

Khi chúng tôi nói về phần mềm tự do, chúng tôi đề cập đến sự tự do sử dụng, chứ không phải là giá cả. Giấy phép Công cộng GNU của chúng tôi được thiết kế để đảm bảo bạn có quyền tự do phát hành bản sao của phần mềm tự do (và thu tiền dịch vụ này nếu muốn), nhận mã nguồn hoặc có khả năng lấy nó nếu bạn muốn, bạn có thể thay đổi phần mềm hay sử dụng bất kỳ đoạn nào của nó trong chương trình tự do mới; và để giúp bạn biết rõ là bạn có thể làm những điều này.

Để bảo vệ quyền lợi của bạn, chúng tôi cần đưa ra những hạn chế để cấm bất cứ ai phủ nhận bạn có những quyền này hay đòi hỏi bạn từ bỏ nó. Những sự hạn chế này được hiểu là một số trách nhiệm nhất thiết của bạn nếu bạn phát hành bản sao của thư viện hoặc sửa đổi nó.

Chẳng hạn, nếu bạn phát hành bản sao của thư viện như vậy, dù là cho không hay thu tiền, bạn phải trao cho người nhận tất cả những quyền bạn có. Bạn phải chắc chắn là họ cũng nhận được hay có thể lấy mã nguồn. Nếu bạn liên kết mã nguồn khác với thư viện, bạn phải cung cấp các tập tin đối tượng hoàn thành cho người nhận, để họ có thể liên kết lại tập tin như vậy với thư viện rồi biên dịch lại. Và bạn cũng phải cho họ biết những điều kiện này, để họ biết những quyền của họ.

Chúng tôi bảo vệ quyền của bạn bằng một phương pháp hai bước: (1) chúng tôi bản quyền tác giả của thư viện, và (2) chúng tôi trao cho bạn giấy phép này để bạn có quyền hợp pháp sao chép, phát hành và/hay sửa đổi thư viện.

Hơn nữa, để bảo vệ mỗi người phát hành, chúng tôi muốn chắc chắn là mọi người hiểu rằng thư viện tự do này không có bảo hành. Nếu thư viện bị sửa đổi bởi người khác và được phân phát tiếp, chúng tôi muốn người nhận biết rằng cái mà họ có đó không phải là bản gốc, vì vậy, bất kỳ lỗi nào do người khác gây ra sẽ không làm mang tiếng đến tác giả gốc.

Cuối cùng, chương trình tự do nào cũng luôn bị đe dọa bởi bằng sáng chế phần mềm. Chúng tôi muốn chắc chắn là công ty không thể giới hạn được các người dùng chương trình tự do, bằng cách giành được giấy phép hạn chế từ người giữ sáng chế. Vì vậy chúng tôi cứ nhất định giấy phép sáng chế nào được giành cho một phiên bản của thư viện này phải phụ hợp với toàn bộ quyền tự do được ghi rõ trong giấy phép này.

Phần lớn phần mềm GNU, gồm có một số thư viện, được bao quát bởi Giấy phép Công cộng GNU chuẩn. Giấy phép này, Giấy phép Công cộng Phụ GNU, áp dụng cho một số thư viện đã xác định: nó rất khác với Giấy phép Công cộng GNU chuẩn. Chúng tôi sử dụng giấy phép này cho một số thư viện riêng, để cho phép khả năng liên kết thư viện như vậy vào chương trình khác tự do.

Khi chương trình được liên kết với thư viện, bất chấp một cách tĩnh hay bằng thư viện dùng chung, sự kết hợp hai điều này nói hợp pháp là một sản phẩm đã kết hợp, sẩn phẩm dẫn xuất thư viện gốc. Giấy phép Công cộng GNU chuẩn thì cho phép khả năng liên kết như vậy chỉ nếu toàn bộ sự kết hợp thoả tiêu chuẩn quyền tự do của nó. Giấy phép Công cộng Phụ GNU cho phép tiêu chuẩn lỏng lẻo hơn để liên kết mã nguồn khác với thư viện.

Chúng tôi gọi giấy phép này Giấy phép Công cộng « Phụ » vì nó làm ít để bảo vệ quyền tự do của người dùng hơn Giấy phép Công cộng chuẩn. Nó cũng cung cấp cho các nhà phát triển phần mềm tự do ít thế lợi hơn chương trình khác tự do cạnh tranh. Những nhược điểm này là lý do chúng tôi sử dụng Giấy phép Công cộng chuẩn cho rất nhiều thư viện. Tuy nhiên, giấy phép Phụ cung cấp lợi ích trong một số trường hợp đặc biệt.

Chẳng hạn, rất ít lần có như cầu đặc biệt hỗ trợ cách sử dụng rộng rãi nhất có thể một thư viện nào đó, để nó trở thành một tiêu chuẩn như thế. Để đặt mục đích này, các chương trình khác tự do cũng phải có quyền sử dụng thư viện đó. Một trường hợp xảy ra nhiều lần hơn là thư viện tự do làm cùng một công việc với thư viện khác tự do được sử dụng rộng rãi. Trong trường hợp này, không có lợi ích nhiều khi giới hạn thư viện tự do trong chỉ phần mềm tự do, vì thế chúng tôi sử dụng Giấy phép Công cộng Phụ.

Trong trường hợp khác, quyền sử dụng một thư viện nào đó trong chương trình khác tự do cũng cho rất nhiều người có khả năng sử dụng một tập phần mềm tự do rất lớn. Chẳng hạn, quyền sử dụng Thư viện C của GNU trong các chương trình khác tự do thì cho rất nhiều người thêm có khả năng sử dụng toàn bộ hệ điều hành GNU, cũng như biến thế của nó, hệ điều hành GNU/Linux.

Mặc dù Giấy phép Công cộng Phụ làm ít hơn để bảo vệ quyền tự do của người dùng, nó có phải đảm bảo rằng người dùng chương trình được liên kết với Thư viện có quyền tự do và khả năng chạy chương trình đó, bằng một phiên bản đã sửa đổi của Thư viện.

Theo đây có những điều kiện chính xác để sao chép, phát hành và sửa đổi. Hãy tập trung cẩn thận sự khác biệt giữa « một sản phẩm dựa vào thư viện » và « một sản phẩm sử dụng thư viện ». Điều trước chứa mã bắt nguồn từ thư viên, còn điều sau phải được kết hợp với thư viện để chạy được.

[sửa] Giấy Phép Công Cộng Phụ GNU — Điều Kiện Sao Chép, Phát Hành và Sửa Đổi

[sửa] Phần 0

Điều kiện Quyền này áp dụng cho bất kỳ thư viện phần mềm hay chương trình khác mà chứa một thông báo được chèn vào bởi người giữ tác quyền hay bất kỳ bên được quyền nói rằng có thể được phát hành theo các điều khoản của Giấy phép Công cộng Phụ này (cũng được gợi như là « Giấy phép này »). Mỗi người được cầp bản quyền được gọi là « bạn ».

Một « thư viện » nghĩa là một tập hợp các hàm phần mềm và/hay dữ liệu được chuẩn bị để được liên kết tiện lợi với chương trình ứng dụng (mà sử dụng một số hàm và dữ liệu trong tập hợp này) để xây dựng tập tin có khả năng thực hiện.

« Thư viện » dưới đây có nghĩa là bất kỳ thư viện phần mềm hay sản phẩm như vậy đã được phát hành theo các điều khoản này. Một « sẩn phẩm dựa trên Thư viện » có nghĩa là Thư viện hay bất kỳ sản phẩm nào bắt nguồn từ nó dưới luật bản quyền: tức là, sản phẩm chứa Thư viện đó hay một phần của nó, hoặc đúng nguyên văn hoặc với sự sửa đổi và/hoặc được dịch sang một ngôn ngữ khác. (Kể từ câu này, việc dịch ngôn ngữ được bao gồm vô hạn trong thuật ngữ « sự sửa đổi ».)

« Mã nguồn » của sản phẩm có nghĩa là dạng thức sản phẩm được ưa thích khi sửa đổi nó. Đối với thư viện, toàn bộ mã nguồn có nghĩa là tất cả các mã nguồn cho mọi mô-đun đã chứa, cộng với bất cứ tập tin xác định giao diện tương ứng, cộng với các văn lệnh được dùng để điều khiển tiến trình biên dịch và cài đặt thư viện.

Những hoạt động khác ngoài sự sao chép, phát hành và sửa đổi không được kiểm soát bởi Giấy phép này; nó ở ngoài phạm vi của giấy phép này. Hành động chạy Thư viện không bị hạn chế, và dữ liệu xuất từ Thư viện chỉ bị khống chế nếu nội dung của nó tạo thành một sản phẩm dựa vào Thư viện (không phụ thuộc vào việc sử dụng Thư viện như là công cụ ghi nó). Điều đó đúng hay không phụ thuộc vào điều mà Thư viện tạo ra, và điều mà chương trình sử dụng Thư viện tạo ra.

[sửa] Phần 1

Bạn có quyền sao chép và phát hành bản sao đúng nguyên văn của toàn bộ mã nguồn của Thư viện như bạn đã nhận nó, bằng bất kỳ cách nào, miễn là bạn công bố rõ ràng và thích đáng trên mỗi bản sao một thông báo tác quyền thích hợp và miễn trừ bảo hành; giữ nguyên vẹn mọi thông báo liên quan đến Giấy phép này và miễn trừ bảo hành; và đưa cho những người nhận Chương trình khác một bản sao của Giấy phép cùng với Thư viện.

Bạn có thể thu phí cho việc gởi bản sao, và bạn có thể tùy ý đề nghị cung cấp dịch vụ bảo hành có thu phí.

[sửa] Phần 2

Bạn có quyền sửa đổi bản sao của mình hay của Thư viện hoặc đoạn nào của nó để tạo một sản phẩm dựa vào Thư viện, và sao chép và phát hành sự sửa đổi hay sản phẩm như vậy theo điều khoản của Phần 1 nêu trên, miễn là bạn cũng tuân theo tất cả các điều kiện sau:

[sửa] a

Sản phẩm đã sửa đổi phải chính nó là thư viện phần mềm.

[sửa] b

Bạn phải làm cho mỗi tập tin đã sửa đổi chứa thông báo dễ thấy nói rằng bạn đã thay đổi tập tin đó và hiển thị ngày tháng của sự thay đổi nào.

[sửa] c

Bạn phải làm cho toàn bộ sản phẩm được cấp miễn phí cho người khác với điều kiện của Giấy phép này.

[sửa] d

Nếu một chức năng trong Thư viện đã sửa đổi tham chiếu đến một hàm hay bảng dữ liệu cần phải được cung cấp bởi một chương trình ứng dụng sử dụng chức năng này, khác với như đối số được gửi qua khi chức năng được gọi, thì bạn phải cố gắng thiện ý chắc chắn là, trong trường hợp ứng dụng không cung cấp hàm hay bảng như vậy, chức năng vẫn còn hoạt động được, cũng thực hiện phần nào của mục đích còn lại hữu ích.

(Chẳng hạn, một hàm trong thư viện để tính căn bậc hai có mục đích được xác định hoàn toàn, không phụ thuộc vào ứng dụng. Vì vậy, Phần phụ 2d cần thiết bất cứ hàm hay bảng do ứng dụng cung cấp được sử dụng bởi hàm này phải là tùy chọn: nếu ứng dụng không cung cấp, hàm căn bậc hai vẫn còn phải tính được căn bậc hai.)

Những điều kiện này áp dụng cho toàn bộ sản phẩm bị sửa đổi. Nếu có thể nhận ra phần riêng của sản phẩm đó không bắt nguồn từ Thư viện, và các phần này có thể được xem một cách hợp lý là sản phẩm riêng và không phụ thuộc, thì Giấy phép này, và các điều kiện của nó, không áp dụng cho những phần riêng đó khi bạn phát hành chúng là sản phẩm riêng. Tuy nhiên, khi bạn phát hành những phần đó cùng với toàn bộ sản phẩm dựa vào Thư viện, sự phát hành toàn bộ này phải tuân theo điều kiện của Giấy phép này, cung cấp cho mọi người có quyền bao trùm toàn bộ sản phẩm, bao quát tất cả mọi phần của nó, bất kể ai đã tạo nó.

Như thế thì phần này không đự định yêu cầu quyền hay không thừa nhận quyền của bạn về sản phẩm mà toàn bộ là do bạn tạo ra; mà phần này định nói về quyền hạn trong điều khiển sự phát hành sản phẩm bắt nguồn từ hay sản phẩm hợp tác tập thể dựa vào Thư viện.

Hơn nữa, việc chứa các sản phẩm khác không dựa vào Thư viện cùng với Thư viện (hay với sản phẩm dựa vào Thư viện) trên thiết bị lưu trữ hay vật phát hành không nằm trong phạm vi của Giấy phép này.

[sửa] Phần 3

Bạn có thể chọn áp dụng các điều kiện của Giấy phép Công cộng GNU chuẩn, thay cho Giấy phép này, cho một bản sao nào đó của Thư viện. Để làm như thế, bạn phải thay đổi mọi thông báo đề cập Giấy phép này, để đề cập Giấy phép Công cộng GNU chuẩn, phiên bản 2, thay cho Giấy phép này. (Có phiên bản mới hơn của Giấy phép Công cộng GNU chuẩn thì bạn có thể ghi rõ phiên bản đó thay thế, nếu bạn muốn.) Đừng thay đổi gì khác trong những thông báo này.

Một khi làm thay đổi này trong bản sao nào, không thể đảo ngược lại cho bản sao đó, vì thế Giấy phép Công cộng GNU chuẩn áp dụng cho tất cả các bản sao phụ và sản phẩm bất nguồn từ bản sao đó.

Tùy chọn này không có ích khi bạn muốn sao chép phần mã nguồn của Thư viện vào một chương trình không phải là thư viện.

[sửa] Phần 4

Bạn có quyền sao chép và phát hành Thư viện (hoặc đoạn nào của nó hoặc sản phẩm dựa vào nó, dưới Phần 2) trong dạng thức mã đối tượng hay tập tin chạy được với điều kiện của Phần 1 và 2 bên trên, miễn là bạn kèm theo toàn bộ mã nguồn tương ứng mà máy có thể đọc được, được phát hành với điều kiện của Phần 1 và 2 bên trên, trên thiết bị lưu trữ thường dùng để trao đổi phần mềm.

Nếu việc phát hành mã đối tượng được làm bằng cách trao truy cập sao chép từ một nơi đã xác định, thì việc trao các truy cập sao chép tương đương đến mã nguồn đó từ cùng nơi đó được tính là sự phát hành mã nguồn, mặc dù người khác không bắt buộc phải sao chép mã nguồn cùng với mã đối tượng.

[sửa] Phần 5

Một chương trình không chứa sản phẩm bắt nguồn từ bất cứ đoạn nào của Thư viện, còn được thiết kế để làm việc với Thư viện bằng cách được biên dịch hay liên kết với nó, được gọi là « sản phẩm sử dụng Thư viện ». Sản phẩm như vậy, độc lập không phải là sản phẩm bắt nguồn từ Thư viện thì nằm ở ngoại phạm vi của Giấy phép này.

Tuy nhiên, việc liên kết một « sản phẩm sử dụng Thư viện » với Thư viện thì tạo một tập tin chạy được bắt nguồn từ Thư viện (vì nó chứa đoạn của Thư viện), hơn là một « sản phẩm sử dụng Thư viện ». Tập tin chạy được thì được bao quát bởi Giấy phép này. Phần 6 phát biểu các điều kiện phát hành tập tin chạy được như vậy.

Khi một « sản phẩm sử dụng Thư viện » cũng sử dụng đoạn nào của tập tin phần đầu thuộc về Thư viện, mã đối tượng cho sản phẩm này có thể là một sản phẩm bắt nguồn từ Thư viện, mặc dù mã nguồn không phải. Điều đó đúng hay không là quan trọng đặc biệt nếu sản phẩm này có thể được liên kết không có Thư viện, hoặc nếu sản phẩm này chính nó là thư viện. Pháp luật chưa xác định chính xác ngưỡng đúng của trường hợp này.

Tập tin đối tượng như vậy sử dụng chỉ các tham số kiểu số, bố trí cấu trúc dữ liệu, và vĩ lệnh nhỏ và hàm trực tiếp nhỏ (mỗi điều có độ dài tối đa 10 dòng) thì cách sử dụng tập tin đối tượng là vô hạn, bất chấp nó hợp lý là sản phẩm bắt nguồn. (Tập tin chạy được chứa mã đối tượng này cộng với đoạn của Thư viện vẫn còn nằm dưới Phần 6.)

Không thì, nếu sản phẩm bắt nguồn từ Thư viện, bạn có thể phát hành mã đối tượng của sản phẩm theo điều kiện của Phần 6. Bất kỳ tập tin chạy được chứa sản phẩm đó cũng nằm dưới Section 6, bất chấp nó được liên kết trực tiếp với Thư viện chính nó.

[sửa] Phần 6

Ngoại lệ những Phần trên là bạn cũng có thể kết hợp hay liên kết một « sản phẩm sử dụng Thư viện » với Thư viện để tạo một sản phẩm chứa đoạn của Thư viện, rồi phát hành sản phẩm đó dưới các điều khoản bạn chọn, miễn là điều khoản này cho phép sửa đổi sản phẩm cho người khách sử dụng riêng, và cho phép thiết kế đối chiếu để gỡ lỗi trong sự sửa đổi như vậy.

Bạn phải công bố rõ ràng trên mỗi bản sao của sản phẩm một thông báo rằng Thư viện được dùng trong nó, và rằng Thư viện và cách sử dụng nó được bao quát bởi Giấy phép này. Bạn phải cung cấp một bản sao của Giấy phép này. Nếu sản phẩm trong khi thực hiện cũng hiển thị thông báo tác quyền, bạn phải chèn thông báo tác quyền cho Thư viện vào trong các thông báo như vậy, cũng như một tham chiếu chỉ người dùng tới bản sao của Giấy phép này. Hơn nữa, bạn phải làm một của những việc này:

[sửa] a

Kèm theo toàn bộ mã nguồn Thư viện tương ứng mà máy có thể đọc được, gồm thay đổi nào được làm trong sản phẩm đó (mà phải được phát hành dưới Phần 1 và 2 bên trên); và nếu sản phẩm là một tập tin có khả năng chạy được liên kết với Thư viện, kèm theo toàn bộ « sản phẩm sử dụng Thư viện » cho máy đọc được, theo định dạng mã đối tượng và/hay mã nguồn, để người dùng có khả năng sửa đổi Thư viện rồi liên kết nó để tạo một tập tin chạy được chứa Thư viện đã sửa đổi. (Hiểu được rằng người dùng thay đổi nội dung của tập tin xác định trong Thư viện sẽ không nhất thiết có khả năng biên dịch lại ứng dụng để sử dụng lời xác định đã sửa đổi.)

[sửa] b

Dùng một cơ chế thư viện dùng chung thích hợp để liên kết với Thư viện. Cơ chế thích hợp (1) dùng vào lúc chạy một bản sao thư viện đã nằm trên hệ thống máy tính của người dùng, thay vào sao chép các hàm thư viện vào tập tin chạy được, và (2) sẽ hoạt động cho đúng với một phiên bản thư viện đã sửa đổi, nếu người dùng cài đặt nó, miễn là phiên bản đã sửa đổi có giao diện tương thích với giao diện của phiên bản trong đó sản phẩm được tạo.

[sửa] c

Kèm theo lời mời ghi trên giấy, hợp lệ trong ít nhất ba năm sau, cung cấp cho cùng người dùng những nguyên liệu được xác định trong Phần phụ 6a trên, với giá không lớn hơn giá cần thiết để phân phát sản phẩm này.

[sửa] d

Nếu việc phát hành được làm bằng cách trao truy cập sao chép từ một nơi đã xác định, thì trao các truy cập sao chép tương đương đến những nguyên liệu đã xác định trên từ cùng nơi đó.

[sửa] e

Kiểm tra xem người dùng đã nhận một bản sao của những nguyên liệu này, hoặc bạn đã gửi một bản sao cho người dùng này.

Đối với tập tin chạy được, dạng thức cần thiết của « sản phẩm sử dụng Thư viện » phải chứa chương trình nào kiểu dữ liêu hay tiện ích cần thiết để tạo lại tập tin chạy được từ nó. Tuy nhiên, ngoại lệ đặc biệt là các nguyên liệu được phát hành không cần phải bao gồm những gì được phát hành bình thường (trong dạng thức hoặc nguồn hoặc nhị phân) với các thành phần chính (bộ biên dịch, hạt nhân v.v.) của hệ điều hành nơi tập tin chạy được hoạt động, trừ khi thành phần kèm theo cần thiết để chạy tập tin.

Có thể xảy ra rằng điều kiện này mâu thuẫn sự hạn chế giấy phép của thư viện sở hữu khác không bình thường kèm theo hệ điều hành. Sự mâu thuẫn như vậy có nghĩa là bạn không thể sử dụng cả thư viện như vậy và Thư viện đều trong tập tin chạy được bạn phát hành.

[sửa] Phần 7

Bạn có thể để chức năng thư viện là sản phẩm dựa vào Thư viện cạnh nhau trong một thư viện riêng lẻ, cộng với các chức năng thư viện không được bao quát bởi Giấy phép này, và phát hành thư viện đã kết hợp như vậy, miễn là cho phép phát hành riêng « sản phẩm sử dụng Thư viện » và chức năng thư viện khác, và miễn là bạn làm hai việc này:

[sửa] a

Kèm theo thư viện đã kết hợp một bản sao của cùng « sản phẩm sử dụng Thư viện », riêng với chức năng thư viện khác nào. Nó phải được phát hành với các điều khoản của những Phần trên.

[sửa] b

Công bố rõ ràng trên thư viện đã kết hợp thông báo rằng phần của nó là « sản phẩm sử dụng Thư viện », cũng chỉ tới nơi chứa dạng thức riêng của cùng sản phẩm kèm theo.

[sửa] Phần 8

Không cho phép bạn sao chép, sửa đổi, liên kết với hay phát hành Thư viện, trừ với điều kiện được diễn tả dứt khoát trong Giấy phép này. Bất kỳ sự cố gắng nào trong việc sao chép, sửa đổi, cấp giấy phép phụ, liên kết với hay phát hành Thư viện bằng cách khác bị bãi bỏ, và sẽ tự động kết thúc các quyền của bạn dưới Giấy phép này. Tuy nhiên, người khác đã nhận bản sao hay quyền từ bạn dưới Giấy phép này sẽ không bị ảnh hưởng, miễn là họ tiếp tục tuân theo hoàn toàn.

[sửa] Phần 9

Bạn không bắt buộc phải chấp nhận Giấy phép này, vì bạn chưa ký tên vào nó. Tuy nhiên, không có gì khác cho phép bạn sửa đổi hay phát hành Thư viện hay sản phẩm bắt nguồn từ nó. Các hành động này bị pháp luật cấm nếu bạn không chấp nhận Giấy phép này. Vì vậy, bằng cách sửa đổi hay phát hành Thư viện (hay sản phẩm dựa vào nó), bạn ngụ ý sự chấp nhận Giấy phép này để làm như thế, gồm mọi điều kiện sao chép, phát hành hay sửa đổi Thư viện hay sản phẩm dựa vào nó.

[sửa] Phần 10

Mỗi lần bạn phát hành lại Thư viện (hay sản phẩm dựa vào Thư viện), người nhận có thể nhận tự động một giấy phép từ người cấp gốc, để sao chép, phát hành, liên kết với hay sửa đổi Thư viện với điều kiện này. Không cho phép bạn hạn chế thêm cách người dùng sử dụng các quyền đã được cấp trong Giấy phép này. Bạn cũng không phải chịu trách nhiệm về việc ép buộc người khác tuân theo điều kiện của Giấy phép này.

[sửa] Phần 11

Nếu, do kết quả của quyết định của toà án hay các cáo buộc vi phạm bằng sáng chế hay vì bất cứ lý do nào (không bị giới hạn trong vấn đề bằng sáng chế), bạn bị ép buộc chấp nhận điều kiện (hoặc vì quyết định của toà án, sự thoả thuận hoặc cách khác nào) mà mâu thuẫn điều kiện của Giấy phép này, trường hợp này không miễn cho bạn không phải thỏa mãn điều kiện của Giấy phép này. Nếu bạn không thể phát hành bằng cách thỏa mãn đồng thời các giao ước của bạn dưới Giấy phép này và bất kỳ giao ước thích hợp khác, thì kết quả là không cho phép bạn phát hành Thư viện bằng cách nào cả. Lấy thí dụ, nếu một bằng sáng chế nào đó không cho phép sự phát hành lại Thư viện một cách miễn tiền bản quyền phát minh cho mọi người nhận bản sao từ bạn một cách trực tiếp hay gián tiếp, thì cách duy nhất bạn có thể thỏa cả bằng đó và Giấy phép này là hoàn toàn không phát hành Thư viện.

Nếu đoạn nào trong phần này được quyết định là không hợp lệ hay không thể được ép buộc trong bất kỳ trường hợp riêng nào, đoạn còn lại dự định áp dụng được, và toàn bộ phần dự định áp dụng trong các trường hợp khác.

Không phải là mục đích của phần này để xúi giục bạn vi phạm bằng sáng chế nào hay lời yêu sách quyền tài sản khác, hoặc để không thừa nhận sự hợp lệ của lời yêu sách như vậy; phần này có mục đích duy nhất là bảo vệ tình trạng nguyên vẹn của hệ thống phát hành phần mềm tự do, mà được thực thi bởi các áp dụng giấy phép công cộng. Nhiều người đã đóng góp rộng lượng cho một phạm vị rộng của các phần mềm được phát hành qua hệ thống đó, nhờ sự thực thi nền bỉ hệ thống đó: tùy tác giả / người tặng quyết định nếu họ muốn phát hành phần mềm qua hệ thống khác nào, và người được cấp Giấy phép không thể điều khiển cách quyết định đó.

Phần này dự định diễn tả rõ ràng hoàn toàn kết quả được hiểu của phần còn lại của Giấy phép này.

[sửa] Phần 12

Nếu sự phát hành và/hay cách sử dụng Thư viện bị hạn chế trong một số quốc gia nào đó, hoặc bởi bằng sáng chế hoặc bởi giao diện có bản quyền tác giả, người giữ tác quyền gốc đã đặt Thư viện dưới Giấy phép này có khả năng thêm sự hạn chế phát hành địa lý riêng loại trừ những quốc gia đó, để cho phép phát hành chỉ trong hay giữa các quốc gia không bị loại trừ như thế. Trong trường hợp như vậy, Giấy phép này hợp nhất sự hạn chế đó như là nó được ghi trong thân của Giấy phép này.

[sửa] Phần 13

Tổ chức Phần mềm Tự do có thể xuất bản phiên bản đã sửa đổi và/hay mới của Giấy phép Công cộng Phụ GNU. Phiên bản mới như vậy sẽ có tinh thần tương tự với phiên bản hiện thời, nhưng có thể khác biệt trong chi tiết để giải quyết vấn đề mới.

Mỗi phiên bản được gán một số hiệu phân biệt phiên bản đó. Nếu Thư viện xác định số phiên bản riêng của Giấy phép này áp dụng cho nó, « và bất kỳ phiên bản sau nào », bạn có tùy chọn thỏa điều kiện hoặc của phiên bản đó, hoặc của bất kỳ phiên bản sau nào được xuất bản bởi Tổ chức Phần mềm Tự do. Nếu Thư viện không xác định số phiên bản riêng của Giấy phép này, bạn có khả năng chọn bất kỳ phiên bản nào của Giấy phép này đã được xuất bản bởi Tổ chức Phần mềm Tự do.

[sửa] Phần 14

Nếu bạn muốn hợp nhất phần nào của Thư viện vào chương trình tự do khác có điều kiện phát hành không tương thích với Giấy phép này, hãy xin phép tác giả. Đối với phần mềm có bản quyền tác giả của Tổ chức Phần mềm Tự do, hãy viết thư cho Tổ chức Phần mềm Tự do : thỉng thoảng chúng tôi cho phép ngoại lệ trong trường hợp này. Quyết định của chúng tôi sẽ được hướng dẫn bởi hai mục đích là sự bảo tồn trạng thái tự do của mọi điều bắt nguồn từ phần mềm tự do của chúng tôi, và sự đẩy mạnh sự chia sẻ và sử dụng lại phần mềm một cách chung.

[sửa] Không Bảo Hành

[sửa] Phần 15

VÌ THƯ VIỆN ĐÃ ĐƯỢC CẤP PHÉP MIỄN PHÍ, KHÔNG CÓ BẢO HÀNH ĐỐI VỚI THƯ VIỆN NÀY, VỚI ĐIỀU KIỆN ĐƯỢC PHÁP LUẬT CHO PHÉP. TRỪ KHI XÁC ĐỊNH KHÁC BẰNG TÀI LIỆU GIẤY TỜ, CÁC NGƯỜI GIỮ BẢN QUYỀN TÁC GIẢ VÀ/HAY NGƯỜI KHÁC CUNG CẤP THƯ VIỆN NÀY « NHƯ THẾ », KHÔNG CÓ BẢO HÀNH GÌ CẢ, KHÔNG PHÁT BIỂU NÓ, CŨNG KHÔNG NGỤ Ý NÓ, GỒM, NHƯNG KHÔNG BỊ HẠN CHẾ BỞI, SỰ BẢO ĐẢM ĐÃ NGỤ Ý TÌNH TRẠNG CÓ THỂ BÁN ĐƯỢC VÀ SỰ THÍCH HỢP VỚI MỘT MỤC ĐÍCH DỨT KHOÁT. MỌI RỦI RO VỀ CHẤT LƯỢNG, ĐỘ CHÍNH XÁC VÀ HIỆU SUẤT CỦA THƯ VIỆN NÀY BẠN SẼ TỰ CHỊU. NẾU THƯ VIỆN NÀY GÂY RA HƯ HỎNG, BẠN GÁNH VÁC HOÀN TOÀN TRÁCH NGHIỆM TRẢ TIỀN DỊCH VỤ GIÚP ĐỠ HAY SỪA CHỮA.

[sửa] Phần 16

KHÔNG CÓ TRƯỜNG HỢP NÀO (TRỪ KHI PHÁP LUẬT YÊU CẦU HAY KHI ĐƯỢC THỎA THUẬN BẰNG TÀI LIỆU GIẤY TỜ) MÀ BẤT KỲ NGƯỜI GIỮ BẢN QUYỀN TÁC GIẢ NÀO, HAY BẤT KỲ NGƯỜI KHÁC NÀO CÓ THỂ SỬA ĐỔI VÀ/HAY PHÁT HÀNH LẠI THƯ VIỆN NHƯ ĐƯỢC PHÉP BÊN TRÊN, SẼ CÓ TRÁCH NHIỆM VỀ PHÁP LÝ BỒI THƯỜNG, GỒM BẤT KỲ BỒI THƯỜNG KIỂU TỔNG QUÁT, ĐẶC BIỆT, NGẪU NHIÊN HAY DO HẬU QUẢ DO SỬ DỤNG HAY SỰ KHÔNG CÓ KHẢ NĂNG SỬ DỤNG THƯ VIỆN NÀY (GỒM NHƯNG KHÔNG PHẢI BỊ HẠN THẾ BỞI SỰ MẤT DỮ LIỆU HAY DỮ LIỆU BỊ LÀM CHO KHÔNG CHÍNH XÁC HAY CÁC MẤT MÁT CỦA BẠN HAY NGƯỜI KHÁC HAY SỰ KHÔNG HOẠT ĐỘNG ĐƯỢC THƯ VIỆN NÀY VỚI CHƯƠNG TRÌNH KHÁC), THẬM CHÍ NẾU BẠN HAY NGƯỜI KHÁC ĐÃ ĐƯỢC BÁO BIẾT CÓ KHẢ NĂNG THIỆT HẠI NHƯ VẬY.

Két thúc của điều kiện

[sửa] Cách áp dụng điều kiện này cho các chương trình mới của bạn

Nếu bạn phát triển thư viện mới, và muốn làm cho nó có ích nhiều nhất cho mọi người, phương pháp tốt nhất đạt được mục đích này là làm cho nó là phần mềm tự do mà mọi người có thể phát hành lại và sửa đổi với điều kiện này. Có thể làm như thế bằng cách cho phép phát hành lại dưới những điều kiện này (hoặc dưới những điều kiện của Giấy phép Công cộng chuẩn).

Để làm như thế, hãy đính các thông báo theo đây kèm chương trình. Cách an toàn nhất là đính chúng vào đầu của mỗi tập tin mã nguồn, để thể hiện cách thông báo không có bảo hành một cách hữu hiệu nhất; và mỗi tập tin nên chứa ít nhất đoạn « Tác quyền » và thông tin chỉ tới nơi tìm được thông báo đầy đủ.


   {một đoạn ghi tên thư viện và mô tả ngắn.}
Copyright © {năm tên của tác giả}
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.

[Bản dịch: {một đoạn ghi tên chương trình và mô tả ngắn.}
Tác quyền © {năm tên của tác giả}

[một đoạn ghi tên chương trình và mô tả ngắn.}
Tác quyền © {năm tên của tác giả}

Thư viện này là phần mềm tự do; bạn có thể phát hành lại nó và/hoặc sửa đổi nó với điều kiện của Giấy phép Công cộng Phụ GNU như được xuất bản bởi Tổ chức Phần mềm Tự do; hoặc phiên bản 2.1 của Giấy phép này, hoặc (tùy chọn) bất kỳ phiên bản sau nào.

Thư viện này được phát hành vì mong muốn nó có ích, nhưng KHÔNG CÓ BẢO HÀNH GÌ CẢ, THẬM CHÍ KHÔNG CÓ BẢO ĐẢM ĐƯỢC NGỤ Ý KHẢ NĂNG BÁN HAY KHẢ NĂNG LÀM ĐƯỢC VIỆC DỨT KHOÁT. Xem Giấy phép Công cộng Phụ GNU để biết thêm chi tiết.

Bạn đã nhận một bản sao của Giấy phép Công cộng Phụ GNU cùng với chương trình này; nếu không, hãy viết thư cho Tổ chức Phần mềm Tự do,
số 51 Đường Franklin, Tầng thứ năm,
Thành Phố Boston, Tỉnh MA số bưu điện 02110-1301 Mỹ.
]

Bạn cũng nên thêm thông tin về cách liên lạc với bạn bằng cả thư bưu điện lẫn thư điện tử.

Bạn cũng nên yêu cầu người chủ của bạn (nếu bạn làm việc lập trình viên trong một công ty) hay trường học của bạn, nếu có, ký tên vào « đơn từ chối trách nhiệm tác quyền » về thư viện này, nếu cần. Đây là một mẫu ví dụ : {hãy thay thế đoạn nằm trong dấu ngoặc móc}


{Tên công ty hay trường}, hereby disclaims all copyright interest in the library `{Tên thư viện}’ (which {chức năng của thư viện}) written by {tên tác giả}.


[Bản dịch:
{Tên công ty/trường} bằng cách này từ chối bất kỳ sự sở hữu thư viện `{Tên thư viện}’ ({kiểu thư viện}) được tạo bởi {Tên lập trình viên}.

{chữ ký của chủ}, {ngày tháng}
{tên và chức vụ của chủ}
]


Verbatim copying and distribution of this translation of the GNU LGPL is permitted in any medium without royalty provided this notice is preserved.

Mọi người đều đuợc quyền sao chép và phân phối nguyên văn bản dịch giấy phép này, thông qua bất cứ phương tiện nào, miễn tiền bản quyền phát minh, miễn là thông báo này được bảo tồn.

[sửa] Xem thêm

GPL
GFDL
OFL

Giấy phép GNU LGPL

Tháng Chín 22, 2008

Bản dịch tiếng Việt của Giấy phép Công cộng GNU Hạn chế

Người dịch: Đặng Minh Tuấn
Email : dangtuan@vietkey.net

Đây là bản dịch tiếng Việt không chính thức của Giấy phép Công cộng GNU Hạn chế. Bản dịch này không phải do Tổ chức Phần mềm Tự do ấn hành, và nó không quy định về mặt pháp lý các điều khoản cho các phần mềm sử dụng giấy phép GNU LGPL — chỉ có bản tiếng Anh gốc của GNU LGPL mới có thể làm được như vậy. Tuy nhiên, chúng tôi hy vọng rằng bản dịch này sẽ giúp cho những người nói tiếng Việt hiểu rõ hơn về GNU LGPL.
This is an unofficial translation of the GNU Lesser General Public License into Vietnamese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU LGPL–only the original English text of the GNU LGPL does that. However, we hope that this translation will help Vietnamese speakers understand the GNU LGPL better.

Giấy phép công cộng GNU hạn chế (LGPL)
    Phiên bản 2.1, tháng 2 năm 1999
    Copyright (C) 1991, 1999 Free


Software Foundation, Inc. 59 Temple Place – Suite 330, Boston, MA  02111-1307, USA Ai cũng được phép sao chép và lưu hành bản sao nguyên bản nhưng không được phép thay đổi nội dung của giấy phép này.
[Đây là phiên bản đầu tiên của Giấy phép GNU Hạn chế. Giấy phép này cũng được coi là phiên bản kế tiếp của Giấy phép công cộng GNU, phiên bản 2.0, do đó nó có phiên bản là 2.1.]
Lời nói đầu
Giấy phép sử dụng của hầu hết các phần mềm đều được đưa ra nhằm hạn chế bạn tự do chia sẻ và thay đổi nó. Ngược lại, Giấy phép Công cộng của GNU có mục đích đảm bảo cho bạn có thể tự do chia sẻ và thay đổi phần mềm tự do – tức là đảm bảo rằng phần mềm đó là tự do đối với mọi người sử dụng.
Giấy phép Công cộng GNU hạn chế này được áp dụng cho các gói phần mềm – đặc biệt là các thư viện — của Tổ chức Phần mềm Tự do hoặc của các tác giả quyết định sử dụng giấy phép này. Bạn cũng có thể sử dụng nó, nhưng theo chúng tôi bạn nên suy nghĩ kỹ lưỡng liệu nên sử dụng giấy phép này hoặc Giấy phép công cộng GNU bình thường cho từng trường hợp cụ thể, căn cứ theo những điều khoản dưới đây.
Khi nói đến phần mềm tự do, chúng ta nói đến sự tự do sử dụng chứ không quan tâm đến giá cả. Giấy phép Công cộng của chúng tôi được thiết kế để đảm bảo rằng bạn hoàn toàn tự do cung cấp các bản sao của phần mềm tự do (cũng như kinh doanh dịch vụ này nếu bạn muốn); rằng bạn có thể nhận được mã nguồn nếu bạn muốn; rằng bạn có thể sửa đổi phần mềm hoặc sử dụng các thành phần của phần mềm đó cho những chương trình tự do mới; và rằng bạn được thông báo là bạn có thể làm được những điều này.
Để bảo vệ quyền của bạn, chúng tôi cần đưa ra những hạn chế để ngăn chặn những ai chối bỏ quyền của bạn, hoặc yêu cầu bạn chối bỏ quyền của mình. Những hạn chế này cũng có nghĩa là những trách nhiệm nhất định đối với bạn khi bạn cung cấp các bản sao của thư viện hoặc khi chỉnh sửa thư viện đó.
Ví dụ, nếu bạn cung cấp các bản sao của một thư viện, dù miễn phí hay không, bạn phải cho người nhận tất cả các quyền mà bạn có. Bạn cũng phải đảm bảo rằng họ cũng nhận được hoặc có thể nhận được mã nguồn. Nếu bạn liên kết mã nguồn khác với thư viện, bạn phải cung cấp các tập tin đã dịch cho người nhận sao cho họ có thể liên kết lại được sau khi sửa đổi và dịch lại thư viện. Và bạn phải giới thiệu những điều khoản này cho họ để họ biết rõ về quyền của mình.
Chúng tôi bảo vệ quyền của bạn với hai bước: (1) bảo vệ bản quyền thư viện phần mềm, và (2) cung cấp giấy phép này để bạn có thể sao chép, lưu hành và/hoặc chỉnh sửa thư viện một cách hợp pháp.
Để bảo vệ người phân phối, chúng tôi cần phải làm rõ rằng không có bảo hành  cho những thư viện tự do. Nếu một người nào đó chỉnh sửa và sau đó phân phối nó, thì chúng tôi muốn những người sử dụng biết rằng cái họ đang có không phải là bản gốc, do đó tất cả những vấn đề, lỗi do những người khác gây ra hoàn toàn không ảnh hưởng tới uy tín của tác giả ban đầu. Cuối cùng, bất kỳ một chương trình tự do nào cũng đều thường xuyên có nguy cơ bị đe doạ bởi giấy phép bản quyền.
Chúng tôi muốn chắc chắn rằng các công ty không thể hạn chế người sử dụng đối với phần mềm tự do khi các công ty này có giấy phép từ những người nắm giữ bản quyền. Bởi vậy, chúng tôi yêu cầu mỗi giấy phép bản quyền cho thư viện cần phải được đảm bảo hoàn toàn tự do sử dụng theo giấy phép này.Phần lớn các phần mềm GNU, kể cả một số thư viện, được bảo vệ theo Giấy phép Công cộng thông thường.
Giấy phép này, Giấy phép Công cộng Hạn chế, được áp dụng cho những thư viện có mục đích xác định, khác hẳn so với Giấy phép Công cộng thông thường. Chúng ta sử dụng Giấy phép này cho mục đích liên kết những thư viện đó vào những phần mềm không tự do. Khi chương trình được liên kết với một thư viện, dù liên kết tĩnh hay liên kết động, thì kết hợp của hai thành phần đó về mặt pháp lý là một sản phẩm kết hợp, có nguồn gốc từ thư viện gốc ban đầu.
Giấy phép Công cộng thông thường chỉ cho phép những liên kết đó nếu toàn bộ sự kết hợp phải thoả mãn điều kiện tự do. Giấy phép Công cộng hạn chế đưa ra những điều kiện ràng buộc ít hơn khi liên kết mã nguồn khác với thư viện.
Chúng tôi gọi giấy phép này là Giấy phép Công cộng “Hạn chế” bởi vì nó bảo vệ quyền tự do của người sử dụng ở mức độ hạn chế hơn so với Giấy phép Công cộng thông thường. Nó cũng hạn chế tính ưu việt trong việc cạnh tranh với những phần mềm không tự do đối với những nhà phát triển phần mềm tự do khác.
Những hạn chế này cũng là lý do tại sao chúng ta dùng Giấy phép Công cộng thông thường cho đa số các thư viện. Tuy nhiên Giấy phép Công cộng Hạn chế cũng có những ưu điểm trong một số trường hợp xác định.
Ví dụ, trong một số hãn hữu trường hợp, cần phải quảng bá, phân phối rộng nhất có thể được đối với một số thư viện để sao cho nó sẽ thành chuẩn “thực tế” (de facto). Để làm được điều này, cần phải cho phép những phần mềm không tự do cũng có thể sử dụng được thư viện này.
Trường hợp phổ biến hơn là, khi thư viện tự do có cùng chức năng giống thư viện không tư do đang được dùng phổ biến, trong trường hợp này thì thư viện tự do sẽ hạn chế sử dụng chỉ trong các phần mềm tự do, vì vậy chúng ta cần sử dụng Giấy phép Công cộng hạn chế (để có thể nâng cao miền ảnh hưởng).
Trong các trường hợp khác, việc cho phép sử dụng một số bộ thư viện nào đó được sử dụng trong các phần mềm không tự do sẽ tạo ra một số lượng lớn hơn người sử phần mềm tự do.
Ví dụ, việc cho phép sử dụng bộ thư viện GNU C trong phần mềm không tự do sẽ khuyến khích nhiều người sử dụng hệ điều hành GNU cũng như các biến thể của nó, hệ điều hành GNU/LINUX.
Mặc dù Giấy phép Công cộng Hạn chế sẽ bảo vệ quyền tự do của người sử dụng ít hơn, nhưng nó vấn đảm bảo rằng người sử dụng phần mềm được liên kết với một thư viện xác định có sự tự do và đủ quyền để thực thi chương trình sử dụng phiên bản sửa đổi của thư viện đó.
Dưới đây là những điều khoản và điều kiện rõ ràng đối với việc sao chép, lưu hành và chỉnh sửa. Bạn hãy đặc biệt lưu ý sự khác nhau giữa hai khái niệm “Sản phẩm dựa trên bộ thư viện” và “Sản phẩm sử dụng bộ thư viện”; sản phẩm thứ nhất chứa mã nguồn được có nguồn gốc từ thư viện, còn sản phẩm thứ hai cần phải liên kết với thư viện mỗi khi thực thi.
NHỮNG ĐIỀU KHOẢN VÀ ĐIỀU KIỆN ĐỐI VỚI VIỆC SAO CHÉP, LƯU HÀNH VÀ CHỈNH SỬA

  • 0. Giấy phép này áp dụng cho bất kỳ một thư viện hay một chương trình mà người giữ bản quyền công bố rằng nó có thể được cung cấp trong khuôn khổ những điều khoản của Giấy phép Công cộng Hạn chế này. Mỗi người được cấp phép được gọi là “bạn”.
    Từ “thư viện” có nghĩa là tập hợp các hàm và/hoặc dữ liệu được chuẩn bị sao cho có thể dễ dàng liên kết với các chương trình (có sử dụng các hàm và dữ liệu này) để tạo thành chương trình hoàn chỉnh có thể thực thi được.
    Từ “Thư viện” (viết hoa chữ Thư) dưới đây có nghĩa là tất cả các thư viện chương trình hay sản phẩm được phân phối theo các điều khoản của giấy phép này. Sản phẩm dựa trên bộ Thư viện là Thư viện hoặc sản phẩm bắt nguồn từ Thư viện đó theo luật bản quyền, nghĩa là một sản phẩm chứa đựng Thư viện hoặc một phần của nó, hoặc đúng nguyên bản hoặc có một số chỉnh sửa và/hoặc được dịch ra một ngôn ngữ khác. (Sau đây, việc dịch được bao gồm nhưng không hạn chế trong khái niệm “chỉnh sửa”).
    “Mã nguồn” của sản phẩm là một dạng của sản phẩm thường được dùng để chỉnh sửa sản phẩm đó. Toàn bộ mã nguồn của một thư viện là tất cả mã nguồn của tất cả các mô-đun của thư viện đó, cộng với các tập tin định nghĩa giao diện tương ứng, cộng với các tập tin lệnh (scripts) được sử dụng để điều khiển quá trình biên dịch và cài đặt bộ thư viện.
    Trong Giấy phép này không đề cập tới các hoạt động khác ngoài việc sao chép, lưu hành và chỉnh sửa; chúng nằm ngoài phạm vi của giấy phép này. Hành động chạy chương trình sử dụng    Thư viện không bị hạn chế, và những kết quả từ việc chạy chương trình chỉ được đề cập tới nếu nội dung của nó tạo thành một sản phẩm dựa trên Thư viện (độc lập với việc sử dụng Thư viện tromg công cụ để viết ra nó). Điều này đúng hay không là phụ thuộc vào Thư viện thực hiện những gì và chương trình sử dụng Thư viện này thực hiện những gì.
  • 1. Bạn có thể sao chép và lưu hành những bản sao nguyên bản của toàn bộ mã nguồn Thư viện đúng như khi bạn nhận được, qua bất kỳ phương tiện nào, với điều kiện trên mỗi bản sao bạn đều kèm theo một ghi chú bản quyền rõ ràng và từ chối bảo hành; giữ nguyên tất cả các ghi chú theo Giấy phép này và về việc không có bất kỳ một sự bảo hành nào; và cùng với Thư viện bạn cung cấp cho người sử dụng một bản sao của Giấy phép này. Bạn có thể tính phí việc chuyển giao vật lý cho mỗi bản sao, và tuỳ theo quyết định của mình bạn có thể cung cấp bảo hành để đổi lại với chi phí mà bạn đã tính.
  • 2. Bạn có thể chỉnh sửa bản sao của bạn hoặc các bản sao của Thư viện hoặc của bất kỳ phần nào của nó, từ đó hình thành một sản phẩm dựa trên Thư viện, và sao chép cũng như phân phối sản phẩm đó hoặc những chỉnh sửa đó theo điều khoản trong Mục 1 trên đây, khi bạn đáp ứng được những điều kiện dưới đây:
    • a)  Sản phẩm đã chỉnh sửa cũng là một thư viện phần mềm.
    • b)  Bạn phải có ghi chú rõ ràng trong những tệp tin đã chỉnh sửa là bạn đã chỉnh sửa nó, và ngày tháng của bất kỳ một thay đổi nào.
    • c)  Bạn phải cấp giấy phép miễn phí cho tất cả các bên thứ ba toàn bộ sản phẩm theo những điều khoản của Giấy phép này.
    • d) Nếu một chức năng nào đó trong Thư viện đã sửa đổi liên quan đến một hàm nào đó hoặc một bảng dữ liệu nào đó được cung cấp đi kèm với một phần mềm, mà phần mềm này sử dụng chức năng đó khác với việc truyền tham số khi chức năng đó được thực hiện, thì bạn phải cố gắng đảm bảo rằng trong trường hợp chương trình không cung cấp kèm hàm và bảng dữ liệu thì chức năng đó vẫn phải hoạt động và thực hiện sao cho bất kỳ mục đích nào của nó vẫn phải có ý nghĩa.
      (ví dụ: một hàm trong thư viện dùng để tính căn bậc 2 được thiết kế để tính với những giá trị được định nghĩa từ trước trong ứng dụng, vì vậy mục 2d yêu cầu rằng bất kỳ hàm hay bảng dữ liệu bất kỳ nào được sử dụng bởi hàm của thư viện sẽ không bị phụ thuộc, nếu chương trình không cung cấp kèm theo chúng thì hàm tính căn bậc 2 vẫn phải tính được căn bậc 2).
      Yêu cầu này được áp dụng cho sản phẩm chỉnh sửa một cách tổng thể. Nếu một phần xác định nào đó của sản phẩm không có nguồn gốc từ Thư viện và nó có thể được coi và tách riêng thành sản phẩm độc lập thì Giấy phép này với các điều khoản của nó sẽ không áp dụng khi bạn phân phối chúng như là sản phẩm riêng biệt. Nhưng khi bạn phân phối nó như là một thành phần của một phần mềm hoàn chỉnh có sử dụng Thư viện đó thì việc phân phối phải tuân thủ các điều khoản của Giấy phép này mà việc cấp phép của nó cho người được cấp phép phải được mở rộng cho toàn bộ sản phẩm, tức là tới bất kỳ phần nào của sản phẩm không quan tâm người nào viết ra thành phần đó.
      Như vậy, điều khoản này không nhằm mục đích xác nhận quyền hoặc tranh giành quyền của bạn đối với những sản phẩm hoàn toàn do bạn viết; mà mục đích của nó là nhằm thi hành quyền kiểm soát đối với việc cung cấp những sản phẩm bắt nguồn hoặc tổng hợp dựa trên Thư viện.
      Ngoài ra, việc kết hợp thuần tuý Thư viện (hoặc một sản phẩm dựa trên Thư viện) với một sản phẩm không dựa trên Thư viện với mục đích lưu trữ hoặc quảng bá trong đĩa cứng, hoặc phuong tiện phân phối sẽ không đưa sản phẩm đó vào trong phạm vi áp dụng của Giấy phép này.
  • 3. Bạn có thể quyết định áp dụng các điều khoản của Giấy phép công cộng thông thường thay vì Giấy phép này cho một bản sao xác định của Thư viện. Để làm điều này, bạn cần phải thay đổi tất cả các ghi chú tham chiếu đến Giấy phép này để sao cho chúng sẽ tham chiếu đến Giấy phép Công cộng thông thường phiên bản 2, thay vì Giấy phép này (nếu xuất hiện phiên bản mới hơn phiên bản 2.0 của Giấy phép Công cộng thì Bạn có thể xác định phiên bản mới đó nếu Bạn muốn.) Bạn không được làm bất kỳ thay đổi nào khác trong các ghi chú này. Một khi các thay đổi này đã được áp dụng cho một bản sao xác định, thì điều đó không thể đảo ngược lại cho bản sao này. Vì vậy Giấy phép Công cộng thông thường sẽ được áp dụng cho các bản sao sau đó hoặc cho sản phẩm có nguồn gốc từ bản sao này. Lựa chọn này sẽ có ích khi Bạn muốn sao một phần mã nguồn của Thư viện vào một chương trình không phải là Thư viện.
  • 4. Bạn có thể sao chép và phân phối Thư viện (hoặc một phần của sản phẩm dựa trên Thư viện, nêu trong Mục 2) dưới hình thức mã đã biên dịch hoặc dưới dạng có thể thực thi được theo các điều khoản nêu trong Mục 1 và 2 ở trên, với điều kiện bạn phải kèm theo đó một bản mã nguồn  đầy đủ có thể biên dịch theo các điều khoản trong Mục 1 và 2 nêu trên trong một môi trường trao đổi phần mềm thông thường.Nếu việc phân phối mã đã biên dịch được thực hiện thông qua việc truy nhập tới một vị trí xác định thì việc cung cấp truy cập tương đương đến mã nguồn từ cùng vị trí đó hoàn toàn đáp ứng yêu cầu phân phối mã nguồn, mặc dù các đối tượng thứ 3 không bắt buộc phải sao cả mã nguồn cùng với mã đã biên dịch.
  • 5. Một phần mềm không chứa bất kỳ thành phần nào có nguồn gốc từ Thư viện nhưng được thiết kế để làm việc với Thư viện thông qua việc biên dịch và liên kết với Thư viện được gọi là “Sản phẩm sử dụng Thư viện”. Sản phẩm như vậy trong sự cô lập không phải là sản phẩm có nguồn gốc từ Thư viện do đó nó nằm ngoài phạm vi của Giấy phép này.
    Tuy nhiên, việc liên kết (link) một “sản phẩm sử dụng Thư viện” với Thư viện tạo ra sản phẩm thực thi có nguồn gốc từ Thư viện (bởi vì nó chứa một phần của Thư viện) chứ không phải là “Sản phẩm sử dụng Thư viện” vì vậy sản phẩm thực thi này sẽ nằm trong phạm vi của Giấy phép này. Mục 6 sẽ quy định những điều khoản cho việc phân phối các sản phẩm thực thi.
    Khi một “Sản phẩm sử dụng thư viện” sử dụng dữ liệu từ các tập tin tiền tố (header) là thành phần của Thư viện, mã đã biên dịch của sản phẩm này có thể là một sản phẩm có nguồn gốc từ Thư viện mặc dù mã nguồn của nó thì không có nguồn gốc từ Thư viện, Điều này có là sự thực hay không, tuỳ thuộc vào việc sản phẩm có được liên kết mà không cần tới Thư viện hoặc Sản phẩm bản thân có là Thư viện hay không, ngưỡng để phân biệt khi nào là sự thật, không được định nghĩa một cách chính xác trong luật.
    Nếu một tập tin đã biên dịch chỉ sử dụng các tham số là các giá trị số, cấu trúc dữ liệu về bố cục, các Macro nhỏ và các hàm nhúng nhỏ (10 dòng lệnh hoặc ít hơn) thì việc sử dụng các tập tin đã biên dịch như vậy là không hạn chế cho dù liệu nó có phải là sản phẩm dẫn xuất hợp pháp hay không. (Các sản phẩm thực thi có chứa những mã đã biên dịch này cộng với các thành phần của Thư viện vẫn phải tuân thủ Mục 6 của Giấy phép này).
    Nói một cách khác, nếu sản phẩm có nguồn gốc từ Thư viện thì bạn có thể phân phối mã đã biên dịch theo các điều khoản ở Mục 6. Một chương trình thực thi được có chứa những sản phẩm như vậy cũng phải tuân theo Mục 6 cho dù nó có được liên kết một cách trực tiếp với Thư viện hay không.
  • 6. Như là một ngoại lệ của Mục trên, bạn có thể kết hợp hoặc liên kết một “sản phẩm sử dụng Thư viện” với Thư Viện để tạo ra một sản phẩm chứa các thành phần của Thư viện và phân phối sản phẩm đó theo các điều khoản mà bạn chọn, với điều kiện các điều khoản này phải cho phép chỉnh sửa sản phẩm phục vụ nhu cầu của người sử dụng và cho phép kỹ thuật khôi phục ngược nhằm  gỡ rối cho những chỉnh sửa đó.Bạn cần phải đưa ra ghi chú rõ ràng với mỗi bản sao của sản phẩm rằng Thư viện được sử dụng trong đó và rằng Thư viện và việc sử dụng nó phải tuân thủ theo Giấy phép này. Bạn cũng phải kèm theo một bản sao của Giấy phép này. Nếu sản phẩm trong quá trình thực thi có hiển thị các ghi chú, bạn cũng phải thêm vào ghi chú bản quyền cho Thư viện cùng với các ghi chú đó cũng như tham chiếu hướng dẫn người sử dụng tới bản sao của Giấy phép này. Bạn cũng phải thực hiện một trong những điều sau:
    • a) Phân phối cùng với sản phẩm toàn bộ mã nguồn tương ứng có thể biên dịch được của Thư viện cùng với tất cả những chỉnh sửa được sử dụng trong sản phẩm (được phân phối theo các Mục 1 và 2 ở trên); và nếu sản phẩm là thực thi được liên kết với Thư viện, thì cũng phải phân phối toàn bộ “sản phẩm sử dụng Thư viện”, như mã đã biên dịch và/hoặc mã nguồn sao cho người sử dụng có thể chỉnh sửa Thư viện và liên kết lại để tạo ra sản phẩm mới có chứa Thư viện được chỉnh sửa. (Được hiểu là người sử dụng thay đổi nội dung các tập tin định nghĩa trong Thư viện sẽ không cần thiết để có thể dịch lại ứng dụng để sử dụng các định nghĩa được sửa đổi.)
    • b) Sử dụng một cơ chế thư viện chia sẻ phù hợp cho viện liên kết với Thư viện. Cơ chế phù hợp là cơ chế (1) sử dụng tại thời điểm thực thi bản sao của thư viện đã có ở trong hệ thống máy tính của người sử dụng mà không phải là sao chép các hàm của thư viện vào trong chương trình, và (2) hoạt động bình thường với phiên bản sửa đổi của thư viện, nếu người sử dụng cài đặt phiên bản sửa đổi có giao diện tương thích với phiên bản mà sản phẩm đã được dùng trước đó.
    • c) Kèm theo đó một đề nghị có hạn trong ít nhất 3 năm, theo đó cung cấp cho cùng một người sử dụng các nội dung được quy định trong Mục 6a ở trên, với giá chi phí không cao hơn giá chi phí vật lý của việc cung cấp đó.
    • d) Nếu phân phối sản phẩm được thực hiện thông qua việc truy cập để sao chép từ một vị trí xác định thì cũng phải cung cấp quyền truy nhập tương đương để sao các nội dung được quy định ở trên từ cùng vị trí.
    • e) Xác định rõ rằng người sử dụng đã nhận được bản sao của các nội dung trên và rằng bạn đã gửi cho người sử dụng đó một bản sao.

    Cho chương trình thực thi được, dạng yêu cầu của ”sản phẩm sử dụng thư viện”  cần phải kèm theo dữ liệu và các chương trình công cụ cần thiết cho việc tạo ra chương trình thực thi. Tuy nhiên, như một trường hợp ngoại lệ đặc biệt, khi các nội dung cần cung cấp không kèm theo bất cứ những gì được phân phối (kể cả ở dạng mã nguồn hay dạng nhị phân) với các thành phần lớn (bộ biên dịch, nhân, vân vân) của hệ điều hành mà chương trình sẽ chạy trên đó, trừ khi thành phần đó được kèm vào trong chương trình thực thi.Cũng có thể xẩy ra trường hợp các yêu cầu mâu thuẫn với các quy định trong giấy phép của các bộ thư viện độc quyền khác không kèm theo hệ điều hành. Mâu thuẫn này có nghĩa là bạn không thể sử dụng cả 2 bộ thư viện cùng nhau trong chương trình mà bạn phân phối.

    • 7. Bạn cũng có thể đặt bộ Thư viện là sản phẩm dựa trên Thư viện ngay cạnh với các bộ thư viện khác không thuộc phạm vi Giấy phép này trong cùng một thư viện và phân phối bộ thư viện kết hợp với điều kiện rằng việc phân phối tách biệt của sản phẩm dựa trên Thư viện và bộ thư viện khác cũng được cho phép bằng một cách khác, và với điều kiện bạn phải thực hiện được 2 điều sau:
      • a) Kèm theo thư viện kết hợp một bản sao của sản phẩm dựa trên Thư viện, chưa được kết hợp với bộ thư viện khác. Việc phân phối đó phải thực hiện theo các điều khoản của Mục trên.
      • b) Đưa ra một ghi chú rõ ràng với thư viện kết hợp rằng một phần của nó là sản phẩm dựa trên thư viện, và giải thích rõ có thể tìm được ở đâu dạng chưa kết hợp được kèm theo của cùng một sản phẩm.
    • 8.  Bạn không được phép sao chép, chỉnh sửa, cấp phép, liên kết hoặc cung cấp Thư viện trừ phi được nêu trong Giấy phép. Bất kỳ ý định bằng cách khác sao chép, chỉnh sửa, cấp phép hoặc liên kết, hoặc cung cấp Thư viện đều làm mất hiệu lực và tự động huỷ bỏ quyền của bạn trong khuôn khổ Giấy phép này. Tuy nhiên, các bên đã nhận được bản sao hoặc quyền từ bạn với Giấy phép này sẽ không bị huỷ bỏ giấy phép nếu các bên đó vẫn tuân thủ đầy đủ các điều khoản của giấy phép.
    • 9.  Bạn không bắt buộc phải chấp nhận Giấy phép này khi bạn chưa ký vào đó. Tuy nhiên, không có gì khác đảm bảo cho bạn được phép chỉnh sửa hoặc cung cấp Thư viện hoặc các sản phẩm bắt nguồn từ Thư viện. Những hành động này bị luật pháp nghiêm cấm nếu bạn không chấp nhận Giấy phép này. Do vậy, bằng việc chỉnh sửa hoặc cung cấp Thư viện (hoặc bất kỳ một sản phẩm nào dựa trên Thư viẹn), bạn đã thể hiện sự chấp thuận đối với Giấy phép này, cùng với tất cả các điều khoản và điều kiện đối với việc sao chép, cung cấp hoặc chỉnh sửa Thư viện hoặc các sản phẩm dựa trên nó.
    • 10. Mỗi khi bạn cung cấp lại Thư viện (hoặc bất kỳ một sản phẩm nào dựa trên Thư viện), người nhận sẽ tự động nhận được giấy phép từ người cấp phép đầu tiên cho phép sao chép, cung cấp, liên kết và chỉnh sửa Thư viện theo các điều khoản và điều kiện này. Bạn không thể áp đặt bất cứ hạn chế nào khác đối với việc thực hiện quyền của người nhận đã được cấp phép từ thời điểm đó. Bạn cũng không phải chịu trách nhiệm bắt buộc các bên thứ ba tuân thủ theo Giấy phép này.
    • 11. Nếu như, theo quyết định của toà án hoặc với những dẫn chứng về việc vi phạm bản quyền hoặc vì bất kỳ lý do nào khác (không giới hạn trong các vấn đề về bản quyền), mà bạn phải tuân theo các điều kiện (nêu ra trong lệnh của toà án, biên bản thoả thuận hoặc ở nơi khác) trái với các điều kiện của Giấy phép này, thì chúng cũng không thể miễn cho bạn khỏi những điều kiện của Giấy phép này. Nếu bạn không thể đồng thời thực hiện các nghĩa vụ của mình trong khuôn khổ Giấy phép này và các nghĩa vụ thích đáng khác, thì hậu quả là bạn hoàn toàn không được cung cấp Thư viện. Ví dụ, nếu trong giấy phép bản quyền không cho phép những người nhận được bản sao trực tiếp hoặc gián tiếp qua bạn có thể cung cấp lại Thư viện thì trong trường hợp này cách duy nhất bạn có thể thoả mãn cả hai điều kiện là hoàn toàn không cung cấp Thư viện.
      Nếu bất kỳ một phần nào trong điều khoản này không có hiệu lực hoặc không thể thi hành trong một hoàn cảnh cụ thể, thì sẽ cân đối các điều khoản để áp dụng, và toàn bộ điều khoản sẽ được áp dụng trong những hoàn cảnh khác.
      Mục đích của điều khoản này không nhằm buộc bạn phải vi phạm bất kỳ một bản quyền nào hoặc các quyền sở hữu khác hoặc tranh luận về giá trị hiệu lực của bất kỳ quyền hạn nào như vậy; mục đích duy nhất của điều khoản này là nhằm bảo vệ sự toàn vẹn của hệ thống cung cấp phần mềm tự do đang được thực hiện với giấy phép công cộng. Nhiều người đã đóng góp rất nhiều vào sự đa dạng của các phần mềm tự do được cung cấp thông qua hệ thống này với sự tin tưởng rằng hệ thống được sử dụng một cách thống nhất; tác giả/người cung cấp có quyền quyết định rằng họ có mong muốn cung cấp phần mềm thông qua hệ thống nào khác hay không, và người được cấp phép không thể có ảnh hưởng tới sự lựa chọn này. Điều khoản này nhằm làm rõ hậu quả của Giấy phép này.
    • 12. Nếu việc cung cấp và/hoặc sử dụng Thư viện bị cấm ở một số nước nhất định bởi các quy  định về bản quyền, thì người giữ bản quyền gốc đã đưa Thư viện vào phạm vi áp dụng của Giấy phép này có thể bổ sung một điều khoản hạn chế việc cung cấp ở những nước đó, nghĩa là việc cung cấp chỉ được phép ở các nước không bị liệt kê trong danh sách hạn chế. Trong trường hợp này, Giấy phép đưa vào những hạn chế được ghi trong nội dung của nó.
    • 13. Tổ chức Phần mềm Tự do có thể theo thời gian công bố những phiên bản chỉnh sửa và/hoặc phiên bản mới của Giấy phép Công cộng Hạn chế. Những phiên bản đó sẽ đồng nhất với tinh thần của phiên bản hiện này, nhưng có thể khác ở một số chi tiết nhằm giải quyết những vấn đề hay lo ngại mới. Mỗi phiên bản sẽ có một mã số phiên bản riêng. Nếu Thư viện áp dụng một phiên bản Giấy phép cụ thể, bạn có quyền lựa chọn tuân theo những điều khoản và điều kiện của phiên bản giấy phép đó hoặc của bất kỳ một phiên bản nào sau đó do Tổ chức Phần mềm Tự do công bố. Nếu Chương trình không nêu cụ thể mã số phiên bản giấy phép, bạn có thể lựa chọn bất kỳ một phiên bản nào đã từng được công bố bởi Tổ chức Phần mềm Tự do.
    • 14. Nếu bạn muốn kết hợp các phần của Thư viện vào các chương trình tự do khác mà có các điều kiện cung cấp khác, hãy viết cho tác giả để xin phép. Đối với các phần mềm được cấp bản quyền bởi Tổ chức Phầm mềm Tự do, hãy đề xuất với tổ chức này; đôi khi chúng tôi cũng có những ngoại lệ. Quyết định của chúng tôi sẽ dựa trên hai mục tiêu là bảo hộ tình trạng tự do của tất cả các sản phẩm bắt nguồn từ phần mềm tự do của chúng tôi, và thúc đẩy việc chia sẻ và tái sử dụng phần mềm nói chung.

    KHÔNG BẢO HÀNH

    • 15. DO THƯ VIỆN ĐƯỢC CẤP PHÉP MIỄN PHÍ NÊN KHÔNG CÓ MỘT CHẾ ĐỘ BẢO HÀNH NÀO TRONG MỨC ĐỘ CHO PHÉP CỦA LUẬT PHÁP. TRỪ KHI ĐƯỢC CÔNG BỐ KHÁC ĐI BẰNG VĂN BẢN, NHỮNG NGƯỜI GIỮ BẢN QUYỀN VÀ/HOẶC CÁC BÊN CUNG CẤP THƯ VIỆN NGUYÊN BẢN SẼ KHÔNG BẢO HÀNH DƯỚI BẤT KỲ HÌNH THỨC NÀO, BAO GỒM NHƯNG KHÔNG GIỚI HẠN TRONG CÁC HÌNH THỨC BẢO HÀNH ĐỐI VỚI TÍNH THƯƠNG MẠI CŨNG NHƯ TÍNH THÍCH HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ. BẠN LÀ NGƯỜI CHỊU TOÀN BỘ RỦI RO VỀ CHẤT LƯỢNG CŨNG NHƯ VIỆC VẬN HÀNH THƯ VIỆN. TRONG TRƯỜNG HỢP THƯ VIỆN CHO THẤY CÓ KHIẾM KHUYẾT, BẠN PHẢI CHỊU TOÀN BỘ CHI PHÍ CHO NHỮNG DỊCH VỤ SỬA CHỮA CẦN THIẾT.
    • 16. TRONG TẤT CẢ CÁC TRƯỜNG HỢP TRỪ KHI CÓ YÊU CẦU CỦA LUẬT PHÁP HOẶC CÓ THOẢ THUẬN BẰNG VĂN BẢN, NHỮNG NGƯỜI CÓ BẢN QUYỀN HOẶC BẤT KỲ MỘT BÊN NÀO CHỈNH SỬA VÀ/HOẶC CUNG CẤP LẠI CHƯƠNG TRÌNH TRONG CÁC ĐIỀU KIỆN NHƯ ĐÃ NÊU TRÊN KHÔNG CÓ TRÁCH NHIỆM VỚI BẠN VỀ CÁC LỖI HỎNG HÓC, BAO GỒM CÁC LỖI CHUNG HAY ĐẶC BIỆT, NGẪU NHIÊN HAY TẤT YẾU NẢY SINH DO VIỆC SỬ DỤNG HOẶC KHÔNG SỬ DỤNG ĐƯỢC THƯ VIỆN (BAO GỒM NHƯNG KHÔNG GIỚI HẠN TRONG VIỆC MẤT DỮ LIỆU, DỮ LIỆU THIẾU CHÍNH XÁC HOẶC CHƯƠNG TRÌNH KHÔNG VẬN HÀNH ĐƯỢC VỚI CÁC CHƯƠNG TRÌNH KHÁC), THẬM CHÍ CẢ KHI NGƯỜI CÓ BẢN QUYỀN VÀ CÁC BÊN KHÁC ĐÃ ĐƯỢC KHUYẾN CÁO VỀ KHẢ NĂNG XẢY RA NHỮNG THIỆT HẠI ĐÓ.

    KẾT THÚC CÁC ĐIỀU KHOẢN VÀ ĐIỀU KIỆN
    Áp dụng những điều khoản trên như thế nào đối với thư viện mới của bạn

    Nếu bạn xây dựng một thư viện mới, và bạn muốn cung cấp tối đa cho công chúng sử dụng, thì biện pháp tốt nhất để đạt được điều này là biến thư viện đó thành phần mềm tự do để ai cũng có thể cung cấp lại và sửa đổi. Bạn có thể thực hiện được điều này bằng việc cho phép các hạn chế theo các điều khoản của Giấy phép này (hoặc theo các điều khoản của Giấy phép GPL).
    Để áp dụng các điều khoản này, hãy đính kèm những ghi chú như sau cùng với thư viện của mình. An toàn nhất là đính kèm chúng vào phần đầu mỗi tệp tin mã nguồn để thông báo một cách hiệu quả nhất về việc không có bảo hành; và mỗi tệp tin đều phải có ít nhất một dòng về “bản quyền” và dòng trỏ đến nới có toàn bộ ghi chú.

      Một dòng đề tên chương trình và nội dung của nó.
      Copyright (C) năm  tên tác giả
      Thư viện này là phần mềm tự do, bạn có thể cung cấp lại và/hoặc chỉnh sửa nó theo những điều khoản của Giấy phép Công cộng Hạn chế của GNU do Tổ chức Phần mềm Tự do công bố; phiên bản 2.1 của Giấy phép, hoặc bất kỳ một phiên bản sau đó (tuỳ sự lựa chọn của bạn).
      Thư viện này được cung cấp với hy vọng nó sẽ hữu ích, tuy nhiên KHÔNG CÓ BẤT KỲ MỘT BẢO HÀNH NÀO; thậm chí kể cả bảo hành về KHẢ NĂNG THƯƠNG MẠI hoặc TÍNH THÍCH HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ. Xin xem Giấy phép Công cộng Hạn chế của GNU để biết thêm chi tiết.
      Bạn phải nhận được một bản sao của Giấy phép Công cộng Hạn chế của GNU kèm theo chương trình này; nếu bạn chưa nhận được, xin gửi thư về’

                Tổ chức Phần mềm Tự do
                59 Temple Place – Suite 330, Boston, MA  02111-1307, USA.

    Xin hãy bổ sung thông tin về địa chỉ liên lạc của bạn (thư điện tử và bưu điện).
    Bạn cũng cần phải lấy chữ ký của người phụ trách (nếu bạn là người lập trình) hoặc của trường học (nếu có) xác nhận từ chối bản quyền đối với thư viện. Sau đây là ví dụ:

      Yoyodyne, Inc., tại đây từ chối tất cả các quyền lợi bản quyền đối với thư viện ‘Frob’
      Viết bởi James Random Hacker.
      chữ ký của Ty Coon, 1 April 1990
      Ty Coon, Phó Tổng Giám đốc

Ext JS và Bài Học Về Mã Nguồn Mở

Tháng Chín 22, 2008

<nguồn: http://www.web2vietnam.com/2008/04/29/ext-js-and-lession-of-os-license/>

Cách đây ít ngày một thư viện JavaScript/Ajax mà tôi rất thích dùng, Ext JS, đột ngột chuyển giấy phép sử dụng từ LGPL (một phiên bản của GPL cho phép sử dụng phần mềm mã mở trong các dự án thương mại) sang GPL v3 (một giấy phép mã mở chặt chẽ bắt buộc các dự án muốn dùng phần mềm mã mở cũng phải là mã mở) sau khi công bố một bản nâng cấp nhỏ. Điều này đã làm dấy lên một làn sóng phản đối, công kích trong khắp cộng đồng người dùng và phát triển.

extjs-gpl.gif

Tôi đã dùng Ext JS ngay từ khi nó chỉ là một thư viện mở rộng của YUI. Đây là một thư viện rất tốt, đặc biệt nó cung cấp những gói UI rất đẹp và dễ sử dụng — chỉ cần vài dòng code JavaScript bạn đã có thể tạo nên một giao diện chuyên nghiệp cho ứng dụng web của mình. Lúc này thư viện có tên là YUI-Ext và được phân phối dưới giấy phép BSD như YUI.

Sau đó Jack Slocum và nhóm phát triển đã đưa thư viện YUI-Ext vượt khỏi phạm vi của YUI trở thành một dự án độc lập. Khi version đầu tiên của Ext JS ra lò, giấy phép sử dụng được đổi thành kiểu “song hành” (dual license): người dùng có thể chọn LGPL (với một vài hạn chế nhỏ) hay mua giấy phép sử dụng thương mại. Có thể nói đây là một bước đi không có gì đáng chê trách để Jack và đồng sự có thể kiếm tiền cho việc phát triển của dự án. Cộng đồng phát triển mã mở vẫn rất vui lòng đóng góp và ủng hộ cho dự án, hơn 35.000 thành viên của diễn đàn Ext JS đã đóng góp vô số ý kiến, thông báo lỗi và tạo nên các thư viện mở rộng (extension) cho chính Ext JS.

Sự kiện Ext JS chuyển giấy phép sử dụng thành GPL (từ phiên bản 2.1 trở đi) đã gây sốc cho công đồng mã nguồn mở vì nhiều lý do. Không hẳn vì chúng ta sẽ phải trả tiền cho Ext. Với giấy phép thương mại hiện tại bạn chỉ cần mua một bản (cho 1 lập trình viên) là có thể triển khai không hạn chế trên nhiều máy chủ (chính xác hơn là trên số CPU không giới hạn). Những lý do chính khiển cộng đồng phát triển không hài lòng là:

  1. Vấn đề đạo đức: Ext JS khởi đầu là một dự án “ăn theo” YUI, họ nhận được nhiều quan tâm vì danh tiếng của YUI. Sau khi xác lập đựơc vị trí, họ bỏ giấy phép tự do và bắt đầu theo đuổi giấy phép chặt chẽ hơn. Là một dự án mã mở, họ nhận được rất nhiều đóng góp từ cộng đồng và đổi lại cộng đồng phát triển ngày lại càng bị thu hẹp phạm vi sử dụng.
  2. Vấn đề lòng tin: Bạn có thể tin được một công ty thay đổi giấy phép thường xuyên theo hướng càng kiếm được nhiều tiền càng tốt hay không? Điều gì sẽ xảy ra nếu một ngày đẹp trời nào đó, sau khi triển khai ứng dụng trên hàng chục máy chủ (tức là vài chục CPU), Ext JS đổi giấy phép thương mại từ “unlimited” sang “per-CPU”? Bạn sẽ phải chấp nhận trả một khoản phí “trên trời rơi xuống” hay bỏ mặc ứng dụng của mình không được nâng cấp hay vá lỗi?
  3. Vấn đề phạm vi giấy phép: Điểm khác biệt giữa LGPL và GPL là giờ đây dự án nào muốn dùng Ext JS miễn phí thì cũng phải là “nguồn mở” theo đúng giấy phép GPL v3. Có ba vấn đề gây tranh cãi là: (1) Vì Javascript được chuyển từ server qua browser người dùng, thì việc này có được coi là “phân phối” mã nguồn và do đó chịu sự rằng buộc của GPL hay không? (2) Việc nén, obfuscate các thư viện Ajax theo GPL có hợp lệ hay không khi người được phân phối (tức là người dùng ứng dụng) không xem được toàn bộ mã nguồn? (2) Theo Jack, mã server-side (Java, PHP…) của dự án cũng phải là nguồn mở mới được dùng Ext JS trong khi một số chuyên gia về giấy phép mã mở cho rằng điều đó là không đúng vì mã JavaScript không có mối liên kết tĩnh (statical link) nào với mã server (?).
  4. Vấn đề thích hợp: Vì những rắc rối nói trên mà bản thân giấy phép GPL v3 không “bao phủ” được hoàn toàn nên hầu hết các thư viện JavaScript đều chọn các giấy phép nguồn mở tự do hơn như BSD hay Apache 2. Việc Ext JS chọn GPL sẽ để lại các “lỗ hổng” có thể dẫn tới việc tranh tụng trong nhiều trường hợp hay nói cách khác chúng giống như những cái bẫy tiềm năng khiến cho việc sử dụng thư viện này theo hướng mã mở hoặc không thể thực hiện được hoặc không hiệu quả.

Nhiều người nói rằng dùng mã nguồn mở là hướng đi rẻ tiền, dễ dàng cho các công ty Việt Nam nhưng câu chuyện trên chỉ là một phần nhỏ trong rất nhiều vấn đề mà các giấy phép mã nguồn mở đặt ra. Tại Mỹ, muốn có lời khuyên đúng đắn bạn sẽ phải nhờ tới các luật sư có kinh nghiệm trong lĩnh vực này và không thực sự có nhiều luật sư như vậy (chắc chắn Jack đã không có được một luật sư tốt).

Qua vụ việc này tôi đã có được nhiều bài học (rất hữu ích cho các CIO), xin tổng kết lại dưới đây:

  1. Giấy phép sử dụng (mã mở hay thương mại) có thể bị thay đổi bất kỳ lúc nào. Mặc dù việc thay đổi giấy phép không áp dụng ngược với các phiên bản trước nhưng bạn sẽ phải đối mặt với vấn đề “trả tiền để được nâng cấp, hỗ trợ hay bỏ mặc phần mềm đó“. Vì thế nên dùng phần mềm mở do các công ty có uy tín bảo trợ vì thường họ rất ít khi thay đổi giấy phép nếu không có lý do chính đáng.
  2. Khi dùng mã nguốn mở, bạn phải đánh giá được mức độ rủi ro có thể gây ra do việc đổi giấy phép và chấp nhận mức độ rủi ro này.
  3. Không phải tất cả các giấy phép mã mở đều giống nhau. Hiểu hết các “ngõ ngách” trong đống ngôn từ của các giấy phép này là việc của các chuyên gia và dù vậy bạn vẫn có thể dính vào kiện tụng do sự diễn dịch khác nhau giữa các bên và khi ấy quyền phán quyết nằm ở tòa án.
  4. Nếu bạn định phân phối phần mềm của mình dưới giấy phép mã nguồn mở thì hãy suy nghĩ và tìm hiểu thật kỹ về phạm vi của các giấy phép này. Tất nhiên, vì là phần mềm của bạn nên bạn có quyền thay đổi giấy phép bất kỳ lúc nào cho các phiên bản mới, nhưng nếu không có lý do chính đáng cộng đồng mã mở sẽ cho rằng bạn đang lợi dụng mã mở để chuộc lợi và bạn sẽ nhanh chóng bị tẩy chay. Trong thế giới đầy cạnh tranh, bạn sẽ biến mất nhanh hơn bạn tưởng.

Ext JS và cá nhân Jack đang chịu nhiều sức ép từ phía cộng đồng. Có thể việc thay đổi giấy phép là bắt buộc nhằm kiếm tiền từ dự án để trả lương cho các lập trình viên nhưng người dùng không khỏi có cảm giác bất mãn khi đã bỏ công sức xây dựng các ứng dụng dựa vào thư viện này rồi đột nhiên nhận thấy nó sẽ không thích hợp nếu sử dụng vào các dự án thương mại hay mã đóng như dự kiến. Quan trọng hơn, việc đổ vỗ lòng tin khiến cho những người dùng nghiêm túc phải suy nghĩ lại về quyết định của mình khi đặt niềm tin lâu dài vào Ext JS.

Các bạn có thể tham khảo thêm về “vụ” Ext JS ở các bài viết dưới đây:

 

Comments:

Thai | April 30th, 2008 at 1:14 am

Bài viết được. Chỉ có một lỗi nhỏ (hay gặp) là bồ đã đánh đồng “phần mềm thương mại” (commercial software) với “phần mềm nguồn đóng” (closed source or proprietary software). Hai khái niệm đó không tương đồng với nhau. Phần mềm thương mại vẫn có thể là phần mềm nguồn mở hay tự do. Phần mềm thương mại vẫn có thể sử dụng các thành phần nguồn mở hay tự do trong mã nguồn của chúng. Phần mềm nguồn đóng thì không thể làm được chuyện đó.

Bản thân tôi cho rằng, không thể trách nhóm Ext JS. Ext JS là của họ, họ có toàn quyền quyết định sẽ sử dụng giấy phép nào.

Nếu cộng đồng không thích và nếu cộng đồng đủ mạnh, họ hoàn toàn có thể lấy phiên bản cuối cùng của Ext JS phát hành với license LGPL mà phát triển lên tiếp.

Còn nếu cộng đồng không thể làm chuyện đó, chứng tỏ rằng, phần lớn công sức phát triển Ext JS là của nhóm của Jack, nên họ xứng đáng kiếm được nhiều tiền hơn từ công sức mà họ bỏ ra.

Vả lại, chọn giấy phép GPLv3 cũng không phải là một quyết định tồi, nếu đứng trên góc nhìn của người ủng hộ phần mềm tự do, nguồn mở.

Nếu có ai đó phải trách, tôi nghĩ chính là những người sử dụng Ext JS mà không có những nghiên cứu cần thiết về rủi ro hoặc chỉ chăm chăm muốn *bốc lột* công sức của người khác mà không muốn trả tiền.

———————————————————————–

TanNg | April 30th, 2008 at 1:51 pm

@Tác giả. Bài viết hay. Open Source, Open content còn cần một chặng đường dài để điều chỉnh và phát triển. Tuy vậy, một khi triết lý đã đúng, thì dù gặp vài trục trặc, cuối cùng phong trào mở vẫn sẽ chiến thắng.

@Thái. Đồng ý với bạn về việc cộng đồng nếu không thích có thể sử dụng bản cuối cùng để phát triển lên tiếp. Tuy vây, khi nhóm Jack đã sử dụng cộng đồng để phát triển nên sản phẩm này thì họ cũng có nghĩa vụ tham khảo và tôn trọng ý kiến cộng đồng trước khi đưa ra các quyết định quan trọng ảnh hưởng tới nhiều người như thay đổi License từ GPL sang GPL3.

Bình luận ngang một chút về GPL3. Open Source thường được đánh đồng với Tự do, nhưng tự do nhất có lẽ là BSD license, GPL3 tạo ra quá nhiều ràng buộc khiến người ta phải tuân theo và tự đánh mất triết lý cốt lõi của chính mình. Tôi có cảm giác rằng, thay vì việc định vị mình là phục vụ cộng đồng, phần nào GPL3 đã tự định vị mình là anti mã đóng.

———————————————————————–

Hồng Quang | April 30th, 2008 at 11:00 pm

@Thai, @TanNg: Thanks for good comments.

@Thai: Hình như mình không đề cập gì tới những khái niệm như phần mềm thương mại (commercial software – CS), phần mềm mã đóng (closed source software – CSS). Đây là một vấn đề khá phức tạp, tuy nhiên, để chúng ta không nhầm lẫn về ngữ nghĩa, mình xin làm rõ những điểm này:

+ Phần mềm thương mại: là những phần mềm được làm ra để cho mục đích thương mại (nói nôm na là để bán lấy tiền). Nghĩa là, trong phần lớn trường hợp, bạn sẽ phải phân phối nó cho khách hàng. Thường thì phần mềm thương mại là mã đóng (closed source) và thuộc sở hữu của một cá nhân hay tổ chức (proprietary software). Một số phần mềm thương mại là mã mở, trong trường hợp này nó sẽ có ít nhất hai loại giấy phép (dual license): giấy phép thương mại và giấy phép mã mở.

+ Giấy phép mã mở chủ yếu chi phối việc bạn có được phân phối lại trong các dự án thương mại hay không. Cụ thể LGPL, BSD hay Apache cho phép điều này (với các điều kiện khác nhau một chút), ngược lại GPL thì tuyệt đối không.

+ Vì thế bạn có thể dùng phần mềm mã mở (kể cả loại giấy phép GPL như MySQL) tự do, kg phải trả phí miễn là bạn không có ý định phân phối lại nó (thí dụ, dùng MySQL trong các dự án web của công ty bạn ngay cả dự án đó lớn như FaceBook). Đây là đọan trích từ Giấy Phép Mã Mở của MySQL:

“Free use for those who never copy, modify or distribute. As long as you never distribute the MySQL Software in any way, you are free to use it for powering your application, irrespective of whether your application is under GPL license or not.”
(Source: http://www.mysql.com/about/legal/licensing/opensource-license.html)

Ngược lại, bạn phải dùng giấy phép thương mại do MySQL AB cấp. Xin xem thêm các trường hợp cụ thể bạn phải mua giấy phép ở đây:
http://www.mysql.com/about/legal/licensing/commercial-license.html

+ Khi phân phối lại các phần mềm mã mở (nếu được phép) bạn phải kèm theo giấy phép và giữ nguyên tham chiếu xuất xứ để người dùng biết được bạn đang dùng các phần mềm mã mở nào, có thể tham khảo mã ở đâu…

+ Nếu bạn mua giấy phép thương mại của một phần mềm mã mở (như của Ext JS hay của MySQL) thì nó sẽ cho phép bạn triển khai trên một số CPU nhất định và/hoặc sử dụng cho số lập trình viên nhất định. Nếu bạn phân phối lại một phần mềm có giấy phép thương mại (thường là dạng thư viện – library) thì tùy trường hợp giấy phép sẽ đòi bạn trả phí thêm cho mỗi bản phân phối (royalty fee) hay kg có rằng buộc này (royalty free). Đương nhiên bạn không cần kèm giấy phép sử dụng và tham chiếu tới các phần mềm bạn mua trong bản phân phối của mình dù nó là mã mở.

Trường hợp các thư viện JavaScript/Ajax như Ext JS khá đặc biệt. Các thư viện này được “phân phối” từ máy chủ tới browser của người dùng (ít nhất theo lập luận của Jack) nên khi nó chuyển qua giấy phép GPL thì đòi hỏi cả dự án web dùng nó phải là nguồn mở. Đây là điểm gây nhiều tranh cãi:

1. Liệu việc sử dụng một ứng dụng web có bị coi là phân phối lại phần mềm hay không?

2. Việc sử dụng một thư viện JavaScript dưới giấy phép GPL có buộc cả dự án phải là mã mở hay không (vì mối liên kết giữa JavaScript và mã server-side có thể chưa đủ mạnh để bị coi là có “liên kết tĩnh” theo định nghĩa của GPL)?

3. Có được phép nén, obfuscate một thư viện JavaScript dùng giấy phép GPL hay không?

Nếu xảy ra tranh chấp và tòa án phán quyết rằng việc sử dụng ứng dụng web không bị coi là phân phối lại phần mềm (nhất là việc phân phối lại các mã JavaScript) thì có nghĩa là chúng ta sẽ có thể dùng Ext JS trong các dự án tương tự như dùng MySQL.

Còn nhiều vấn đề xung quanh câu chuyện này, nhưng hy vọng các bạn sẽ hiểu hơn về các giấy phép mã mở và phạm vi chi phối của chúng.