Debian và Fedora đang cố gắng giải quyết vấn đề phụ thuộc

Các bản phân phối Linux phải đối mặt với vấn đề ngày càng tăng phụ thuộc của các dự án, mặc dù số lượng phụ thuộc cho mã Python, Perl và Ruby được giữ Trong giới hạn hợp lý, các dự án JavaScript thực hành chia thành các thư viện rất nhỏ, thường thực hiện một chức năng đơn giản.

Kho lưu trữ NPM đã có hơn một triệu gói và các ứng dụng điển hình liên kết đến hàng trăm phụ thuộc, do đó có các phụ thuộc riêng, gây khó khăn cho việc duy trì và phân phối các gói truyền thống với các ứng dụng JavaScript trên các bản phân phối Linux.

Do sự đan xen chặt chẽ của các phụ thuộc thư viện JavaScript, việc cập nhật bất kỳ gói nào có các thư viện như vậy trong một bản phân phối nó có thể phá vỡ các gói khác.

Ràng buộc phiên bản làm trầm trọng thêm vấn đề: một thư viện có thể yêu cầu một phiên bản của phụ thuộc để chạy ổn định và một thư viện khác có thể yêu cầu phiên bản khác.

Nhiều dự án yêu cầu phiên bản mới nhất của thư viện để hoạt động, không phải lúc nào cũng đáp ứng các yêu cầu về tính ổn định của bản phân phối (quá trình phát triển liên tục được thực hiện trong hệ sinh thái Node.js bằng cách sử dụng các phiên bản mới nhất của các khuôn khổ và bản phân phối cần được hỗ trợ trong vài năm).

Cố gắng sửa các phiên bản gói chỉ trong bản phân phối dẫn đến sự gia tăng các phiên bản lỗi thời trong kho lưu trữ đã không được cập nhật trong nhiều năm. Việc gián đoạn bảo trì cho một gói sẽ ảnh hưởng xấu đến nhiều gói khác và thậm chí còn gây ra nhiều vấn đề hơn.

Hơn nữa, lphụ thuộc chéo dẫn đến thực tế là nhiều thư viện Node.js không thể gỡ cài đặt khỏi hệ thống, do đó, ngăn bạn gỡ cài đặt các chương trình Node.js khác.

Để đối phó với tình trạng này, dự án Fedora gần đây đã thông qua một kế hoạch ngừng hình thành mặc định các gói riêng biệt với các thư viện được sử dụng trong các dự án dựa trên Node.js.

Ông quyết định, bắt đầu với Fedora 34, chỉ cung cấp các gói cơ sở cho Node.js với trình thông dịch, tiêu đề, thư viện chính, mã nhị phân và các công cụ quản lý gói cơ bản (NPM, sợi).

Trong các ứng dụng kho lưu trữ Fedora sử dụng Node.js, nó được phép nhúng tất cả các phụ thuộc hiện có trong một gói mà không cần phân chia và tách biệt các thư viện được sử dụng trong các gói riêng biệt.

Nhúng thư viện sẽ loại bỏ sự lộn xộn của gói nhỏ, đơn giản hóa việc bảo trì gói (trước đây người bảo trì đã dành nhiều thời gian xem xét và thử nghiệm hàng trăm gói có thư viện hơn so với gói chính với chương trình), tiết kiệm cơ sở hạ tầng khỏi xung đột thư viện và giải quyết các vấn đề liên quan đến liên kết đến các phiên bản thư viện (người bảo trì sẽ bao gồm các phiên bản đã được kiểm tra và sản xuất trong gói).

Mặt trái của tích hợp sẽ là sự phức tạp của quá trình mang lại các hiệu chỉnh các lỗ hổng trong thư viện, đòi hỏi sự phối hợp làm việc của những người bảo trì tất cả các gói bao gồm thư viện dễ bị tấn công. Có một nguy cơ là một gói sẽ quên cập nhật một thư viện tích hợp dễ bị tấn công và gói đó sẽ không được chú ý.

Các nhà phát triển của Debian cũng đang thảo luận về việc chuyển sang một mô hình tích hợp phụ thuộc gói tương tự. Ngoài Node.js, cuộc thảo luận còn đề cập đến việc tạo các gói cho nền tảng Kubernetes và các dự án bằng ngôn ngữ PHP và Go, có xu hướng chia thành các gói phụ thuộc nhỏ. Vẫn chưa có quyết định nào được đưa ra, nhưng người ta hy vọng rằng theo thời gian vấn đề sẽ chỉ trở nên tồi tệ hơn và sớm muộn gì thì dự án cũng buộc phải làm.

Giao diện web gsa (Greenbone Security Assistant) cho trình quét bảo mật gvm (Greenbone Vulnerability Management) được trích dẫn như một ví dụ về các vấn đề mà người bảo trì gói gặp phải.

Phiên bản gsa do Debian vận chuyển hóa ra không tương thích với các phiên bản gvm mới hơn, nhưng không thể cập nhật gsa lên phiên bản hiện tại vì nó có những thay đổi đáng kể và sử dụng npm để tải xuống các thư viện Node.js cần thiết.

Các thư viện được yêu cầu quá nhiều và yêu cầu người nào đó tạo gói mới trong Debian để duy trì chúng, vì các quy tắc Debian cấm tải các thành phần bên ngoài trong quá trình xây dựng.

Fuente: https://lwn.net/


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   qtkk dijo

    Sự phân mảnh này của các khung và thư viện trong ECMAscript đã vượt ra khỏi tầm tay.
    Tốt bài viết.