Cách GitHub duy trì sự tuân thủ đối với các phần phụ thuộc nguồn mở

Mỗi ngày, các kỹ sư GitHub giới thiệu các phần phụ thuộc mới vào nền tảng GitHub, các ứng dụng nội bộ và các dự án nguồn mở. GitHub không chỉ là ngôi nhà của nguồn mở; nó được cung cấp bởi nguồn mở! Và một phần quan trọng của việc sử dụng nguồn mở một cách có trách nhiệm là tôn trọng các giấy phép chi phối các dự án mà bạn phụ thuộc vào.
Tại GitHub, chúng tôi cam kết duy trì các nghĩa vụ của mình đối với cộng đồng nguồn mở và các phần phụ thuộc mà chúng tôi sử dụng. Đây là cách Văn phòng Chương trình Nguồn Mở (OSPO) của chúng tôi sử dụng tính năng Tuân thủ Giấy phép GitHub mới để quản lý hàng nghìn phần phụ thuộc.
Quản lý quy trình tuân thủ giấy phép nguồn mở
Gần như tất cả các phần mềm đều có một số loại thỏa thuận cấp phép. Giấy phép cấp cho bạn quyền sử dụng một dự án, miễn là bạn tuân thủ các nghĩa vụ của nó. Những nghĩa vụ đó có thể đơn giản như ghi công cho tác giả gốc trong tài liệu của bạn hoặc chúng có thể yêu cầu bạn phân phối tất cả mã nguồn khi vận chuyển chương trình của mình. Trong một số trường hợp, giấy phép cũng có thể hạn chế một số hoạt động hoặc danh mục sử dụng nhất định.
Tổ chức của bạn có thể có chính sách riêng về các giấy phép được chấp nhận dựa trên mô hình kinh doanh, hệ sinh thái phần mềm và chiến lược phân phối của bạn. Ví dụ: giả sử tổ chức của bạn bán một ứng dụng nhị phân nguồn đóng, thương mại. Bạn có thể muốn ngăn chặn sự phụ thuộc yêu cầu bạn phải mở mã nguồn độc quyền của mình.
Hoặc, bạn có thể có một dự án mà bạn định phát hành dưới dạng gói nguồn mở. Trong trường hợp này, bạn có thể muốn tránh đưa vào các phần phụ thuộc được quản lý bởi các giấy phép nguồn mở thương mại hoặc không tương thích.
Nếu không thể tuân thủ các nghĩa vụ được yêu cầu trong cả hai trường hợp, bạn nên tránh sự phụ thuộc để ngăn ngừa rủi ro pháp lý hoặc hoạt động. Có thể cần nỗ lực kỹ thuật để loại bỏ các giấy phép này sau khi thực tế xảy ra. Đối với phần mềm doanh nghiệp, rủi ro kinh doanh do không tuân thủ là rất lớn vì nó có thể dẫn đến kiện tụng tốn kém và tổn hại về danh tiếng.
Theo truyền thống, việc đánh giá giấy phép được thực hiện thủ công hoặc bằng phần mềm của bên thứ ba. Nhưng giờ đây, GitHub đã giới thiệu tính năng tuân thủ giấy phép dành cho khách hàng của GitHub Advanced Security, cho phép bạn xem xét các phần phụ thuộc mới trực tiếp trên các yêu cầu kéo. Việc xem xét này giúp đảm bảo rằng các giấy phép cho những phần phụ thuộc đó tuân thủ chính sách của bạn, đồng thời mang lại cho bạn sự linh hoạt trong việc mở rộng chính sách của mình để cho phép các giấy phép mới hoặc các dự án riêng lẻ.
Hai tháng trước, OSPO của GitHub đã di chuyển từ các công cụ chỉ dành cho nội bộ mà chúng tôi đã xây dựng để quản lý việc tuân thủ tính năng mới. Với tư cách là những người áp dụng sớm, chúng tôi đã cung cấp cho nhóm phát triển phản hồi nhanh chóng và giúp đảm bảo tính năng này sẽ vượt qua rào cản dành cho các doanh nghiệp lớn, phát triển nhanh với các yêu cầu tuân thủ phức tạp.
Thiết lập để thành công chính sách
Vì GitHub đã xây dựng các công cụ tuân thủ giấy phép nội bộ trước khi giới thiệu sản phẩm nên chúng tôi đã có sẵn danh sách các giấy phép được chấp nhận để sử dụng làm chính sách ban đầu của mình. Bạn có thể sẽ thấy rằng nhiều phần phụ thuộc sử dụng các giấy phép cho phép phổ biến như MIT, Apache 2.0 và BSD-3-Clause, đây là danh sách khởi đầu tốt để xây dựng chính sách của bạn. Ban đầu, chúng tôi đã triển khai tính năng này bằng cách sử dụng chế độ “Đánh giá” trên bộ quy tắc toàn tổ chức, chế độ này tạo ra chú thích trong các yêu cầu kéo mà không chặn việc hợp nhất, nhờ đó, chúng tôi có thể giúp các nhà phát triển làm quen với quy trình làm việc mới mà không cản trở năng suất của họ. Chạy song song các công cụ cũ và mới cũng cho phép chúng tôi xem liệu hành vi của chúng có khác nhau hay không. Sau khoảng một tháng áp dụng phương thức hoạt động này, chúng tôi đã đi đến tình trạng cảnh báo chủ yếu xuất hiện trên các gói có giấy phép bất thường, bị thiếu hoặc rõ ràng là không được phép.
Cách hoạt động của việc tuân thủ giấy phép GitHub
Dưới mui xe, kiểm tra tuân thủ giấy phép được kích hoạt thông qua bộ quy tắc. Chúng tôi nhắm mục tiêu các kho lưu trữ thông qua một thuộc tính tùy chỉnh, trong đó giá trị của thuộc tính xác định xem kiểm tra giấy phép có được bật ở chế độ “Hoạt động” hay “Đánh giá” hay không. Trong các kho lưu trữ được nhắm mục tiêu bởi một bộ quy tắc, các yêu cầu kéo sửa đổi các phần phụ thuộc của dự án sẽ kích hoạt quá trình quét tra cứu các giấy phép được sử dụng bởi từng phần phụ thuộc mới. Nếu giấy phép của các phần phụ thuộc mới đã được cho phép hoặc có các trường hợp ngoại lệ dành riêng cho gói thì quá trình kiểm tra sẽ vượt qua. Nếu có lỗi, trong phần phụ thuộc trực tiếp hoặc bắc cầu, công cụ sẽ nhận xét về yêu cầu kéo kèm theo cảnh báo cho từng gói có vấn đề.
Sau đó, nhà phát triển sẽ xem xét các cảnh báo. Nếu họ quyết định rằng phần phụ thuộc là không thể chấp nhận được, họ có thể cập nhật mã của mình hoặc đóng yêu cầu kéo để xóa mã đó. Nếu họ tin rằng giấy phép hoặc gói nên được cho phép, họ có thể đưa ra yêu cầu ngoại lệ để thông báo cho một nhóm cụ thể trong tổ chức, những người có thể quyết định xem có nên sửa đổi chính sách hay không và sửa đổi như thế nào.
Một ngày trong cuộc đời của nhóm chính sách cấp phép
Nhóm chính sách cấp phép của GitHub bao gồm các thành viên và kỹ sư OSPO có chuyên môn về đánh giá giấy phép và phân tích chuỗi cung ứng. Vì chúng tôi là công ty toàn cầu nên nhóm đánh giá chính sách của chúng tôi có các thành viên ở khắp các múi giờ để xem xét cảnh báo kịp thời. Chúng tôi đang trong quá trình chính thức hóa SLA để xem xét các yêu cầu cấp phép, nhưng trên thực tế, hiếm khi mất quá vài giờ trước khi chúng tôi có thể phân loại yêu cầu đến.
Các thành viên trong nhóm nhận được thông báo qua email về các yêu cầu xem xét mới và cũng có thể truy cập trang tổng quan để xem các yêu cầu tồn đọng đang chờ xử lý.
Khi phê duyệt một yêu cầu, chúng tôi có hai điểm quyết định: thứ nhất, nên cho phép giấy phép hay gói. Sau đó, quyết định phạm vi nào – doanh nghiệp hoặc kho lưu trữ – sẽ sử dụng. Nếu đó là giấy phép an toàn chưa xuất hiện trước đó, chúng tôi sẽ thêm giấy phép đó ở cấp doanh nghiệp và do đó cho phép các phụ thuộc với giấy phép đó ở bất kỳ đâu tại GitHub. Một số gói mang theo giấy phép thương mại không thể được phép ở mọi nơi nhưng phải được phép trong kho do nhóm đã trả tiền cho phần mềm sở hữu, do đó, những sửa đổi chính sách đó sẽ được thêm vào ở cấp kho lưu trữ. Các trường hợp ngoại lệ của gói rất hữu ích cho phần mềm nội bộ thường không có dữ liệu giấy phép liên quan đến nó. Thật hữu ích, công cụ này hỗ trợ các kết quả khớp ký tự đại diện cho các trường hợp ngoại lệ của gói. Ví dụ: chúng tôi đã cho phép mọi thứ trong không gian tên @github-ui/* React, vì vậy chúng tôi không cần phê duyệt từng gói đó.
Giúp các nhà phát triển dễ dàng
Để hỗ trợ quá trình này, chúng tôi đã thiết lập các quy trình liên hệ với GitHub OSPO và cách sử dụng tính năng ghi đè "vỡ kính" khẩn cấp. Những tình huống này hiếm khi xảy ra nhưng quy trình ghi đè khẩn cấp rõ ràng là điều cần thiết đối với các yêu cầu kéo cực kỳ nhạy cảm về thời gian. Như chúng tôi đã đề cập ở trên, việc thực thi chính sách cấp phép diễn ra thông qua bộ quy tắc và khóa điều kiện của bộ quy tắc sẽ tắt một thuộc tính tùy chỉnh. Vì vậy, việc chuyển đổi giá trị của tài sản có thể tạm thời tắt tính năng thực thi nếu có một bản sửa lỗi quan trọng bị cảnh báo giấy phép chặn. Cho đến nay, chúng ta chỉ cần sử dụng tính năng này một lần nhưng việc có tùy chọn này rất hữu ích.
Chúng tôi cũng đã cung cấp tài liệu và chương trình đào tạo nội bộ để giúp các nhà phát triển hiểu tầm quan trọng của việc tuân thủ giấy phép. Cuối cùng, nhiệm vụ của mọi người là giúp đảm bảo tuân thủ và quản lý rủi ro, đồng thời nhiệm vụ của chúng tôi là làm cho việc đó trở nên dễ dàng nhất có thể.
Kết thúc
Tuân thủ giấy phép là một phần quan trọng trong việc quản lý chuỗi cung ứng phần mềm của chúng tôi. Bằng cách giúp các nhà phát triển đưa ra các lựa chọn phụ thuộc sáng suốt phù hợp với chính sách cấp phép của GitHub, chúng tôi ngăn chặn việc viết lại tốn kém và các vấn đề pháp lý tiềm ẩn. Chúng tôi đã nhiệt tình sử dụng và cung cấp phản hồi về tính năng Tuân thủ Giấy phép GitHub mới trong vài tháng. Hiện tại, nó đã ở dạng bản xem trước công khai, chúng tôi rất vui khi thấy nhiều công ty áp dụng nó hơn và hy vọng trải nghiệm của chúng tôi sẽ cung cấp một số hướng dẫn nếu bạn mới bắt đầu.
Khách hàng của GitHub Enterprise Cloud có thể sử dụng tính năng Tuân thủ giấy phép trên các kho lưu trữ có giấy phép Bảo mật mã GHAS đang hoạt động. Để biết thêm thông tin, hãy xem Giới thiệu về tuân thủ giấy phép nguồn mở.
Bài đăng Cách GitHub duy trì sự tuân thủ đối với các phụ thuộc nguồn mở xuất hiện đầu tiên trên Blog GitHub.