2012-01-23 26 views
12

Tôi đang chuẩn bị gói R sẽ bao gồm tệp thực thi được biên dịch của bên thứ ba. Kế hoạch là để giao tiếp nó với R bằng cách sử dụng các cuộc gọi system(). Tôi có quyền phân phối tệp thi hành này, nhưng không được cấp mã nguồn của nó. Thật không may nó chỉ được biên dịch dưới Windows 32 bit, và nó không thể dễ dàng biên dịch lại nó theo kiến ​​trúc khác nhau.Phân phối tệp thực thi đã biên dịch bằng gói R

Hiểu rằng gói này sẽ có lượng người xem bị hạn chế, làm cách nào để tệp thực thi được phân phối? Tôi cũng nhận ra rằng nó sẽ không được phép trên CRAN vì lý do này.

Ví dụ, nên thực thi được bao gồm trong thư mục/bin/thư mục con của gói cài đặt, hoặc luân phiên nên gói bằng cách nào đó tải xuống tệp thi hành khi bản thân nó được cài đặt.

Ngoài ra, vấn đề cấp phép nào, nếu tôi phải đối mặt với trường hợp này?

+0

Câu hỏi thú vị và đặt ra tốt, nhưng không thực sự _programming_. –

+2

Tôi nghĩ câu hỏi này nằm trong phạm vi của trang web, một thứ gì đó dọc theo dòng (từ FAQ): các công cụ phần mềm thường được sử dụng bởi các lập trình viên –

+3

Cảm ơn Joshua. Điều này đúng, không phải là một câu hỏi lập trình. Tuy nhiên, một câu hỏi chắc chắn được quan tâm đối với các lập trình viên R và các nhà phát triển gói. – digitalmaps

Trả lời

9

Tôi đã làm việc trên hai gói làm một cái gì đó như thế này, cả hai được lưu trữ trên R-giả mạo vì hạn chế nhị phân CRAN (trong đó, bằng cách này, có vẻ hoàn toàn hợp lý với tôi). (Tôi không nghĩ rằng bạn đang bỏ lỡ bất cứ điều gì rõ ràng trong câu hỏi của bạn -. Chỉ nói ở đây là những gì tôi đã chọn để làm)

  • các cpcbp gói (thành phần chủ yếu common/back-chiếu) sử dụng một nhị phân tổng hợp từ mã được viết bởi Patrick Phillips; mã nguồn không thể phân phối được vì nó sử dụng một số công thức số Bí quyết. Tôi đã có ý nghĩa để viết lại lõi này trong R (nó chỉ đơn giản là đại số tuyến tính số, nó sẽ không được khó khăn). Nó xảy ra với tôi rằng tôi có thể phải sửa đổi giấy phép trên này - Tôi có thể nói "GPL" nhưng tôi không nghĩ rằng tôi thực sự có thể làm điều đó cho các thành phần không thể phân ...
  • gói glmmADMB sử dụng tự do mã nguồn phân phối lại (giấy phép BSD), nhưng chuỗi công cụ đủ phức tạp mà tôi không muốn người dùng phải tải xuống toàn bộ gói hỗ trợ

Trong cả hai trường hợp, tôi đặt các tệp nhị phân vào inst/bin và có thể theo kiến ​​trúc cụ thể thư mục con (được cài đặt trong /bin) và sử dụng logic thích hợp để phát hiện kiến ​​trúc và chạy nhị phân chính xác.

Tôi đoán về nguyên tắc bạn có thể nhận xung quanh không có khả năng cấp phép qua GPL bằng cách làm cho một phần không phân phối vào một download (như bạn đề nghị), nhưng điều đó sẽ dường như vi phạm tinh thần ...

+0

Cảm ơn @Ben. Đây là những điểm khởi đầu tuyệt vời để từ đó mô hình hóa gói. – digitalmaps

+0

Câu trả lời hay. Về cấp phép và GPL: GPL giải quyết các vấn đề thú vị liên quan đến các thư viện nhị phân, thư viện hệ thống, vv và điều này có thể quan tâm đến việc gói * trong toto * có phù hợp với các quy tắc FOSS hay không. Xem các liên kết từ [bài đăng này] (http://stackoverflow.com/questions/1854843/does-gpl-code-linking-with-proprietary-library-depend-which-is-created-first) để làm rõ thêm. – Iterator

3

Các cách tiếp cận được đề xuất bởi Ben Bolker cũng được sử dụng bởi gói CRAN "tháo dỡ" - để làm cho hàm maxent() hoạt động, bạn phải tải xuống tệp nhị phân java tối đa và đặt nó vào thư mục con thích hợp trong thư mục gói chính.

Các vấn đề liên quan