Hướng dẫn are all python packages open source? - có phải tất cả các gói python đều là mã nguồn mở?
Hãy tưởng tượng rằng bạn đã cài đặt một gói Python ngẫu nhiên từ PYPI. Có một cơ hội tốt 13,5% rằng gói không có thông tin cấp phép. Xem xét nó không phải là hiếm khi có hàng trăm phụ thuộc và phụ thuộc phụ trong một ứng dụng Python điển hình, có một cơ hội rất tốt để sử dụng mã không có giấy phép. Tùy thuộc vào bối cảnh, hậu quả của việc sử dụng phần mềm không có giấy phép có thể là bất cứ nơi nào từ không đáng kể đến thảm họa. OK, đó là một phạm vi hoang dã, vì vậy bài đăng này sẽ đào sâu hơn vào vấn đề này. Show
Pypi là gì?PYPI là kho lưu trữ trung tâm được sử dụng phổ biến nhất cho các gói Python, được tạo và duy trì bởi Quỹ phần mềm Python. Nó thường được truy cập thông qua các công cụ quản lý gói, chẳng hạn như PIP, để tải xuống và cài đặt các thư viện và ứng dụng Python. Điều này tương tự như các kho lưu trữ gói cho các ngôn ngữ khác, chẳng hạn như NPM cho JavaScript, Rubygems.org cho Ruby và Crates.io cho Rust. Tiểu sửSNYK phân tích sự phụ thuộc của các dự án phần mềm và tìm thấy các vấn đề như lỗ hổng bảo mật và giấy phép xấu. Cuối cùng, gần đây họ đã thuê tôi để lấy tất cả các dữ liệu meta từ PYPI về các gói và các phiên bản được phát hành của họ, bao gồm thông tin cấp phép. Với dữ liệu này trong tay, tôi đã kiểm tra tình hình cấp phép cho tất cả các gói Python trên PYPI. Dưới đây là một số hiểu biết chính từ phân tích này, tiếp theo là các đề xuất dựa trên những hiểu biết này và mô tả về các phương pháp được sử dụng để có được chúng. Làm thế nào là cấp phép trong hệ sinh thái Python?Đầu tiên, ở đây, một lời từ chối nhanh chóng: Tôi không phải là luật sư. Tôi là một kỹ sư phần mềm có kinh nghiệm với một số hiểu biết về cấp phép phần mềm, nhưng tôi không phải là chuyên gia trong lĩnh vực này. Không có điều nào sau đây được coi là tư vấn pháp lý, vì vậy bạn nên tham khảo ý kiến luật sư nếu bạn cần! Các loại giấy phépNói chung, hầu hết tất cả các giấy phép phần mềm nguồn mở đều có thể được chia thành một vài loại rộng:
Để thảo luận bổ sung về Copyleft so với cấp phép cho phép, hãy xem một bài viết trước về chủ đề trên blog của chúng tôi. Trong những năm gần đây, một số giấy phép Copyleft yếu của người Viking đã xuất hiện. Chúng chủ yếu dành cho các thư viện phần mềm, cho phép sử dụng chúng với ít hoặc không có hạn chế nào đối với phần mềm sử dụng. Để biết thêm thông tin về sự khác biệt giữa Copyleft Copyleft, và người mạnh mẽ, hãy xem phần Bài viết của Wikipedia về chủ đề này. Cũng có thể, mặc dù không được khuyến nghị, để không chỉ định bất kỳ giấy phép nào. Điều này thường là do giám sát hoặc thiếu hiểu biết, nhưng trong một số trường hợp hiếm hoi, nó được thực hiện một cách có chủ ý. Không có giấy phép, việc sử dụng phần mềm chỉ đơn giản là tuân theo luật bản quyền (của mỗi quốc gia!), Và cả các loại luật khác như luật bằng sáng chế. Phân tích các loại cấp phépHãy cùng xem các loại giấy phép được sử dụng trên PYPI: Từ dữ liệu này, chúng ta có thể thấy như sau:
Điều này không có gì đáng ngạc nhiên, vì nó tương tự như các xu hướng chung được thấy trên Github và các kho lưu trữ gói các ngôn ngữ khác. Giấy phép phổ biến nhất cho các gói PythonBốn giấy phép thống trị cảnh quan trên PYPI, cụ thể là MIT, mệnh đề BSD-2, GPL-3.0 và Apache-2.0. Nhiều giấy phép khác cũng được sử dụng phổ biến (được sử dụng bởi ít nhất 100 gói). Trong số này, hai là duy nhất cho hệ sinh thái Python: Giấy phép nền tảng phần mềm Python (PSF) và Giấy phép công cộng Zope (ZPL). Những gì bạn nên làm bây giờ!Với việc cấp phép các gói Python trên PYPI, tôi đánh giá cao những điều sau đây:
Đọc thêmChúng tôi chỉ cần trầy xước bề mặt; Cấp phép có thể quan trọng với bạn hơn bạn nhận ra và bạn nên đọc thêm! Cân nhắc đọc các chủ đề sau:
Phương phápDưới đây là một số chi tiết về cách thu thập và phân tích dữ liệu được tiến hành. Đầu tiên, tôi đã thu thập siêu dữ liệu của tất cả các gói và tất cả các phiên bản được phát hành của chúng trên PYPI. Điều này đã được thực hiện trong nhiều ngày vào đầu tháng 8 năm 2018. Vào thời điểm đó, có gần 150.000 gói trên PYPI. Sau đó, tôi đã trích xuất thông tin giấy phép cho từng phiên bản của mỗi gói, từ cả hai trường cấp phép và các trường phân loại trên mạng. Sau đó, tôi đã tổng hợp những thứ đó vào một cấu trúc dữ liệu duy nhất, với các phiên bản được sắp xếp theo cách giải thích kiểu phiên bản ngữ nghĩa. Tiếp theo tôi làm sạch và bình thường hóa dữ liệu cấp phép. Tôi đã xây dựng trên một phiên bản của một tiêu chuẩn giấy phép SPDX được sử dụng tại SNYK. Tôi đã cải thiện một cách chính xác hóa để nhận ra chính xác một phần lớn của giấy phép, theo sau là tạo ra một ánh xạ lớn các trường hợp đặc biệt để xử lý đuôi dài của các trường hợp đặc biệt. Sau này, tôi bắt đầu phân tích 18% các gói mà không có giấy phép. Tôi chưa xem các tập tin trong bản phát hành. Tôi đã chọn ngẫu nhiên 50 gói không có giấy phép, tải xuống các bản phát hành mới nhất của họ và tìm kiếm thông tin cấp phép. Sau khi thu thập thông tin này, tôi đã phân loại các gói này thành năm loại như sau: Chỉ những người thuộc danh mục được cấp phép của người Viking thực sự có giấy phép. Trong số những người theo các hạng mục đào tạo của người Viking, các loại hình vứt bỏ và người giữ chỗ, phần lớn đã bao gồm một số mã và có thể được sử dụng như một sự phụ thuộc, cho dù có mục đích hay do nhầm lẫn (ví dụ: một lỗi đánh máy). Do đó, tôi thấy hợp lý khi xem xét các gói không có giấy phép thích hợp này. Ngoại suy từ mẫu này, tôi đã đưa ra ước tính rằng ~ 18% × 72% = ~ 13,5% các gói PYPI không được cấp phép. Điều đáng chú ý là tôi đã thực hiện phân tích tương tự cho các gói được cấp phép trên PYPI; Có khả năng là có rất nhiều gói đào tạo của người Viking, người khác, và các gói giữ chỗ của người khác đã đề cập đến một giấy phép. Do đó, có lập trường bảo thủ mà chỉ ~ 18% × 28% = ~ 5% các gói thực tế trên mạng trên PYPI không được cấp phép có thể không chính xác nghiêm trọng. Tôi không có thời gian để thực hiện một phân tích như vậy, thật không may, vì vậy tôi đã bị mắc kẹt với phân tích được mô tả ở trên. Nếu bạn có bất kỳ câu hỏi hoặc nhận xét nào, tôi rất thích nghe từ bạn! Vui lòng liên hệ với tôi trên Twitter tại @Taleinat. Nguồn chính thức của các gói Python là gì?PYPI được điều hành bởi Quỹ phần mềm Python, một tổ chức từ thiện. Một số người quản lý gói, bao gồm PIP, sử dụng PYPI làm nguồn mặc định cho các gói và phụ thuộc của chúng. Tính đến ngày 17 tháng 1 năm 2022, có thể truy cập hơn 350.000 gói Python thông qua PYPI. is run by the Python Software Foundation, a charity. Some package managers, including pip, use PyPI as the default source for packages and their dependencies. As of 17 January 2022, more than 350,000 Python packages can be accessed through PyPI.
Python là nguồn mở hay được cấp phép?Tất cả các bản phát hành Python là nguồn mở (xem https://opensource.org/ cho định nghĩa nguồn mở).Trong lịch sử, hầu hết, nhưng không phải tất cả, các bản phát hành Python cũng đã tương thích với GPL;Bảng dưới đây tóm tắt các bản phát hành khác nhau.Open Source (see https://opensource.org/ for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases.
Có bao nhiêu thư viện Python nguồn mở?Nhiều thư viện nguồn mở đã được tạo ra để làm cho cuộc sống dễ dàng cho các lập trình viên và tiết kiệm một số giờ lập trình chuyên sâu.Tuy nhiên, có 137.000 thư viện Python!Và nó có thể trở nên khá áp đảo cho người mới bắt đầu nghiên cứu, sắp xếp và chọn các thư viện anh ta cần học.
Nguồn mở trong Python là gì?Phần mềm nguồn mở là mã được thiết kế để có thể truy cập công khai, bất cứ ai cũng có thể thấy, sửa đổi và phân phối mã khi họ thấy phù hợp.code that is designed to be publicly accessible—anyone can see, modify, and distribute the code as they see fit. |