- README trả lời "dự án này làm gì, chạy thế nào"; LICENSE trả lời "tôi được làm gì với nó". Đọc cả hai trước khi đưa code của người khác vào đồ án hay sản phẩm.
- MIT và Apache 2.0 là giấy phép dễ dãi: được dùng, sửa, bán, miễn giữ thông báo bản quyền và giấy phép. GPL 3.0 là copyleft: phân phối lại thì phải công bố mã nguồn theo cùng giấy phép.
- Kho công khai không có LICENSE không có nghĩa là "tự do dùng": theo GitHub Docs, luật bản quyền mặc định vẫn áp dụng.
- Với mô hình AI, trọng số có thể mang giấy phép khác hẳn code, có khi cấm dùng thương mại. Đọc trường license trong thẻ mô hình.
Bài này dựa trên GitHub Docs, trang Choose a License (do GitHub duy trì) và tài liệu Hugging Face Hub, đọc ngày 11/11/2026. Đây là hướng dẫn để biết cần đọc gì và hỏi gì, không phải tư vấn pháp lý; với sản phẩm thương mại hay hợp đồng, hãy hỏi người có chuyên môn về luật.
README nói gì, và vì sao đọc nó trước
README là tệp đầu tiên GitHub hiện ra khi bạn mở một kho. Theo GitHub Docs, một README tốt thường cho biết dự án làm gì, vì sao nó hữu ích, cách bắt đầu dùng, hỏi trợ giúp ở đâu và ai đang duy trì dự án. GitHub tìm README theo thứ tự: thư mục .github, rồi thư mục gốc, rồi thư mục docs; nếu có nhiều bản, bản trong .github được hiện.
Khi đọc README của một dự án AI, nên dò tìm năm thứ sau:
- Mục đích: dự án giải bài toán gì, kết quả đạt được trên dữ liệu nào. Con số trong README là của tác giả; muốn dùng lại thì xem họ đo thế nào.
- Yêu cầu: phiên bản Python, có cần GPU không, cần bao nhiêu bộ nhớ.
- Cài đặt và chạy: lệnh cụ thể, tệp mô hình hay dữ liệu cần tải riêng. Bài chạy dự án AI từ GitHub đi qua từng bước này.
- Tình trạng: dự án còn được cập nhật không, có ghi "thử nghiệm" hay "không còn duy trì" không.
- Giấy phép và trích dẫn: nhiều README có mục License ở cuối, và dự án nghiên cứu thường có mục Citation chỉ cách ghi nguồn bài báo.
README cho bạn biết dự án có đáng thử không. Còn việc bạn được làm gì với nó thì phải đọc tệp LICENSE.
LICENSE quyết định bạn được làm gì
Code là tác phẩm có bản quyền. Giấy phép là văn bản tác giả dùng để cho người khác một số quyền với điều kiện kèm theo. Trang Choose a License chia nội dung mỗi giấy phép thành ba cột: quyền (được làm gì), điều kiện (phải làm gì) và giới hạn (tác giả không chịu gì). Đọc theo ba cột này giúp bạn hiểu giấy phép nhanh hơn đọc toàn văn từ đầu.
Trên GitHub, nếu kho có tệp LICENSE dạng chuẩn, tên giấy phép hiện ở cột bên phải trang kho. Đó là chỗ nên nhìn đầu tiên, sau đó mở tệp để đọc kỹ.
Ba giấy phép bạn sẽ gặp nhiều nhất
Tóm tắt dưới đây theo trang Choose a License, đọc ngày 11/11/2026.
MIT. Ngắn và đơn giản. Quyền: dùng thương mại, phân phối, sửa, dùng riêng. Điều kiện duy nhất: giữ thông báo bản quyền và nội dung giấy phép trong các bản sao. Giới hạn: tác giả không bảo hành và không chịu trách nhiệm. Rất nhiều thư viện Python bạn dùng hằng ngày theo kiểu giấy phép này.
Apache 2.0. Quyền giống MIT, cộng thêm việc người đóng góp cấp rõ quyền với các bằng sáng chế liên quan tới phần họ viết. Điều kiện nhiều hơn MIT một chút: giữ thông báo bản quyền và giấy phép, ghi rõ những thay đổi bạn đã làm với tệp gốc. Giới hạn thêm: không cho dùng nhãn hiệu (tên, logo) của dự án. Nhiều dự án AI lớn chọn Apache 2.0 vì điều khoản sáng chế rõ ràng.
GPL 3.0. Thuộc nhóm copyleft mạnh. Bạn vẫn được dùng, sửa, dùng thương mại, nhưng khi phân phối phần mềm có dùng code GPL (kể cả bản đã sửa), bạn phải công bố mã nguồn, giữ cùng giấy phép GPL và ghi rõ thay đổi. Ý tưởng là phần mềm phái sinh cũng phải mở như bản gốc.
Ngoài ba giấy phép trên, bạn sẽ gặp:
- MPL 2.0: copyleft yếu, tính theo từng tệp. Tệp bạn sửa phải giữ giấy phép MPL và công bố mã, còn tệp bạn tự viết thêm thì không bị buộc.
- Unlicense: tác giả từ bỏ bản quyền, đưa code vào phạm vi công cộng, không kèm điều kiện.
- BSD 2 hoặc 3 điều khoản: gần với MIT, cũng thuộc nhóm dễ dãi.
Một điểm dễ hiểu nhầm: "điều kiện" của MIT hay Apache phát sinh khi bạn phân phối bản sao (đưa code hoặc chương trình cho người khác). Còn copyleft của GPL 3.0 cũng gắn với việc phân phối; nếu bạn chỉ chạy code trên máy mình để học, bạn không phải công bố gì. Riêng AGPL mở rộng điều kiện sang cả trường hợp cho người khác dùng chương trình qua mạng, nên với dự án web hay API, gặp AGPL cần đọc kỹ.
Kho không có LICENSE thì sao
Đây là trường hợp sinh viên hay hiểu sai nhất. Theo GitHub Docs, nếu kho không có giấy phép, luật bản quyền mặc định áp dụng: tác giả giữ mọi quyền, và không ai được sao chép, phân phối hay tạo sản phẩm phái sinh từ code đó. Điều khoản dịch vụ của GitHub chỉ cho người khác xem và fork kho công khai.
Trang Choose a License gợi ý ba hướng khi gặp code như vậy: nhờ người duy trì thêm giấy phép (thường chỉ là họ quên, có thể mở issue để hỏi), tìm một phần mềm khác có giấy phép mở, hoặc thương lượng một giấy phép riêng với chủ sở hữu. Đọc code để học ý tưởng rồi tự viết lại theo cách của mình là chuyện khác với chép nguyên văn.
Code và trọng số mô hình có thể khác giấy phép
Với dự án AI, một kho thường gồm ba thứ: code huấn luyện và chạy, trọng số mô hình (tệp rất lớn, hay để trên Hugging Face), và dữ liệu. Ba thứ này có thể mang ba giấy phép khác nhau. Code có thể là Apache 2.0 trong khi trọng số mô hình dùng giấy phép riêng của hãng phát hành.
Tài liệu Hugging Face Hub (đọc ngày 11/11/2026) cho biết giấy phép của một kho mô hình ghi trong trường license của phần siêu dữ liệu ở đầu README (thẻ mô hình). Danh sách mã giấy phép Hugging Face hỗ trợ có cả các giấy phép dành riêng cho mô hình như openrail, bigscience-openrail-m, llama3, llama3.1, llama4, gemma, và các giấy phép phi thương mại như cc-by-nc-4.0. Khi giấy phép không nằm trong danh sách, kho ghi license: other kèm tên giấy phép và một tệp LICENSE riêng.
Nghĩa là: thấy code MIT chưa đủ để kết luận bạn được dùng mô hình cho sản phẩm thương mại. Một số giấy phép mô hình giới hạn mục đích sử dụng hoặc chỉ cho phép nghiên cứu. Bài Hugging Face là gì chỉ cách tìm thẻ mô hình và đọc các trường này.
Tự động nhận diện giấy phép bằng Python
Khi bạn thử nhiều kho cùng lúc, có thể dùng một đoạn code nhỏ để lọc nhanh. Đoạn dưới đây nhận diện tệp LICENSE dựa vào vài câu đặc trưng của từng giấy phép (ví dụ MIT luôn có câu "Permission is hereby granted, free of charge"), đọc trường license trong thẻ mô hình Hugging Face, rồi in nghĩa vụ chính kèm theo. Kho không có tệp nào được báo là "KHÔNG CÓ" cùng lời nhắc về luật bản quyền mặc định.
"""Nhận diện giấy phép của một kho và nhắc nghĩa vụ chính khi dùng lại.
Nguồn tóm tắt nghĩa vụ: choosealicense.com (trang của GitHub), đọc ngày 11/11/2026. Đây chỉ là gợi ý để biết nên đọc kỹ
điều gì; điều khoản đầy đủ nằm trong chính tệp LICENSE, và với việc quan trọng hãy hỏi người hiểu luật.
- Code: nhận diện tệp LICENSE theo vài câu đặc trưng của từng giấy phép.
- Mô hình trên Hugging Face: đọc trường license trong phần YAML đầu README (thẻ mô hình).
"""
import re
DAU_HIEU = [
("MIT", ["permission is hereby granted, free of charge"]),
("Apache-2.0", ["apache license", "version 2.0"]),
("GPL-3.0", ["gnu general public license", "version 3"]),
("MPL-2.0", ["mozilla public license", "2.0"]),
("Unlicense", ["this is free and unencumbered software"]),
]
NGHIA_VU = {
"MIT": "giữ thông báo bản quyền và giấy phép; được dùng thương mại",
"Apache-2.0": "giữ thông báo bản quyền và giấy phép, ghi rõ chỗ đã sửa; có cấp quyền bằng sáng chế",
"GPL-3.0": "phân phối lại phải công bố mã nguồn và dùng cùng giấy phép",
"MPL-2.0": "tệp đã sửa phải công bố mã nguồn và giữ cùng giấy phép",
"Unlicense": "không có điều kiện, tác giả từ bỏ bản quyền",
"KHÔNG CÓ": "luật bản quyền mặc định: không được sao chép, phân phối, làm sản phẩm phái sinh nếu chưa xin phép",
}
def nhan_dien_license(van_ban):
thap = " ".join(van_ban.lower().split())
for ten, cum in DAU_HIEU:
if all(c in thap for c in cum):
return ten
return "CHƯA RÕ"
def doc_license_the_mo_hinh(readme):
"""Đọc trường license trong khối YAML ở đầu README của Hugging Face (giữa hai dòng ---)."""
m = re.match(r"^---\n(.*?)\n---", readme, re.S)
if not m:
return None
for dong in m.group(1).splitlines():
khoa, sep, gia_tri = dong.partition(":")
if sep and khoa.strip() == "license":
return gia_tri.strip().strip("'\"")
return None
def tom_tat(ten_kho, license_text=None, readme=None):
if license_text is None and readme is None:
loai = "KHÔNG CÓ"
elif license_text is not None:
loai = nhan_dien_license(license_text)
else:
loai = doc_license_the_mo_hinh(readme) or "CHƯA RÕ"
goi_y = NGHIA_VU.get(loai, "giấy phép riêng của mô hình: đọc toàn văn, chú ý giới hạn mục đích sử dụng")
if loai == "CHƯA RÕ":
goi_y = "không nhận ra: mở tệp đọc toàn văn"
return f"{ten_kho:<14} {loai:<12} {goi_y}"
VI_DU = [
("kho-a", "Copyright (c) 2026 X\n\nPermission is hereby granted, free of charge, to any person ...", None),
("kho-b", "Apache License\nVersion 2.0, January 2004\n...", None),
("kho-c", "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n...", None),
("kho-d", None, None),
("mo-hinh-e", None, "---\nlicense: cc-by-nc-4.0\ntags:\n- vision\n---\n# Mô hình E\n"),
]
def chay_thu():
dong = [tom_tat(*v) for v in VI_DU]
print("\n".join(dong))
return dong
if __name__ == "__main__":
chay_thu()
Kết quả với năm kho mẫu: kho-a nhận ra MIT, kho-b Apache-2.0, kho-c GPL-3.0, kho-d không có giấy phép, còn mo-hinh-e là mô hình dùng cc-by-nc-4.0 nên được nhắc đọc toàn văn vì có giới hạn mục đích. Đoạn code cố tình chặt: văn bản GPL phiên bản 2 không bị nhận nhầm thành GPL 3.0 mà được báo "CHƯA RÕ" để bạn tự mở ra đọc. Công cụ chỉ giúp phân loại nhanh; quyết định cuối cùng vẫn dựa vào toàn văn giấy phép.
Dùng code mã nguồn mở trong đồ án và sản phẩm
Một quy trình ngắn mỗi khi định lấy code của người khác:
- Mở cột bên phải trang kho xem tên giấy phép, rồi mở tệp LICENSE đọc phần điều kiện.
- Nếu là mô hình, mở thẻ mô hình xem trường
license; nếu là dữ liệu, xem giấy phép của bộ dữ liệu. - Giữ nguyên thông báo bản quyền trong các tệp bạn chép. Với Apache 2.0, ghi chú những chỗ đã sửa.
- Ghi nguồn trong README của dự án bạn: tên dự án, địa chỉ kho, giấy phép.
- Nếu dự án của bạn sẽ được phân phối và có dùng code GPL, chuẩn bị công bố mã nguồn theo GPL.
Với đồ án ở trường, giấy phép là một chuyện, quy định học thuật là chuyện khác. Giấy phép MIT cho phép bạn dùng code, nhưng nếu đề bài yêu cầu tự viết thì nộp code người khác vẫn vi phạm quy định của lớp. Luôn ghi rõ phần nào lấy từ đâu.
Khi tự đưa dự án lên GitHub, hãy thêm LICENSE ngay từ đầu. GitHub cho chọn mẫu giấy phép khi tạo kho hoặc khi thêm tệp tên LICENSE. Không chắc chọn gì thì MIT là lựa chọn đơn giản cho dự án học tập.
- Nghĩ rằng kho công khai thì được dùng tùy ý; không có LICENSE nghĩa là chưa được phép.
- Xóa dòng thông báo bản quyền khi chép code MIT hay Apache vào dự án.
- Chỉ xem giấy phép của code mà quên giấy phép của trọng số mô hình và dữ liệu.
- Dùng code GPL trong sản phẩm phân phối mà không chuẩn bị công bố mã nguồn.
- Coi tóm tắt (kể cả bài này hay công cụ tự động) là toàn văn giấy phép.
Câu hỏi thường gặp
Học và chạy thử code GPL trên máy mình có phải công bố gì không?
Không. Điều kiện công bố mã nguồn của GPL gắn với việc phân phối phần mềm cho người khác. Chạy để học trên máy mình thì không phát sinh nghĩa vụ đó.
MIT và Apache 2.0 nên chọn cái nào cho dự án của mình?
Cả hai đều dễ dãi. MIT ngắn gọn hơn; Apache 2.0 có thêm điều khoản về bằng sáng chế và yêu cầu ghi chỗ đã sửa. Với dự án học tập, MIT thường là đủ.
Kho có giấy phép trong README nhưng không có tệp LICENSE thì sao?
Đó vẫn là tuyên bố của tác giả, nhưng kém rõ ràng hơn. Nếu định dùng nghiêm túc, mở issue nhờ tác giả thêm tệp LICENSE.
Fork một kho có đổi được giấy phép không?
Fork không làm đổi giấy phép của phần code gốc. Phần code gốc vẫn theo giấy phép ban đầu; với giấy phép copyleft, bản phái sinh còn phải giữ cùng giấy phép.
Học tiếp
- Đọc xong README, đến bước cài và chạy: chạy dự án AI từ GitHub.
- Muốn tìm thêm kho AI đáng học (và xem giấy phép của chúng): những repo AI mã nguồn mở nên biết.
- Đọc giấy phép trọng số mô hình trên thẻ mô hình: Hugging Face là gì.
- Xem lại toàn bộ chủ đề: GitHub cho người học AI.
Nếu bạn muốn học Python và AI bài bản cùng giảng viên, tham khảo khóa học AI của Big-O Coding.
Khóa AI – Introduction to Machine Learning: nền tảng Máy học từ thuật toán cơ bản đến Neural Networks và LLM, học bằng Python. Học thử buổi 1 miễn phí.


