Bỏ qua để đến nội dung
getnextpdf.com

Premium phiên bản

Hai kênh phân phối: ionCube và mã nguồn đã ký

NextPDF Pro và Enterprise được phân phối dưới hai hình thức, và bạn có thể hình dung chúng như hai kênh cho cùng một sản phẩm:

  • Mã hóa bằng ionCube — mã PHP có thể cài đặt được, với mã nguồn đã được mã hóa và chạy qua ionCube Loader lúc thực thi (runtime).
  • Mã nguồn dạng văn bản đã ký — mã nguồn PHP đọc được, được ký bằng mật mã để bạn có thể xác minh rằng nó là bản gốc và chưa bị sửa đổi.

Cả hai kênh đều mang cùng một giấy phép và cùng các quyền (bản NextPDF Commercial License Agreement điều chỉnh cả hai, và việc tiếp cận mã nguồn có thể đọc được không bao giờ đồng nghĩa với việc được phép sao chép hay phân phối lại nó). Chúng tồn tại vì hai loại khách hàng có hai vấn đề khác nhau cần giải quyết, và chúng tôi định giá mỗi kênh tương ứng với sự đánh đổi mà nó đi kèm — chứ không phải vì kênh này có nhiều tính năng hơn kênh kia. Trang này giải thích lý do, để bạn có thể lựa chọn với hiểu biết đầy đủ. Để biết cách thiết lập thực tế cho bản dựng đã mã hóa, xem Thiết lập ionCube Loader.

Vì sao bảo vệ mã nguồn là một vấn đề thực sự trong PHP

Phần tiêu đề “Vì sao bảo vệ mã nguồn là một vấn đề thực sự trong PHP”

PHP được phát hành và chạy dưới dạng mã nguồn. Khác với các ngôn ngữ biên dịch thành một tệp nhị phân mờ đục hay thành bytecode trước khi phân phối, mã nguồn đang chạy của một gói PHP chính là thứ bạn cài đặt — runtime đọc trực tiếp nó. Đó là một trong những thế mạnh lớn của PHP: nó minh bạch, dễ kiểm tra, dễ vá lỗi, và là một phần lớn lý do khiến hệ sinh thái mã nguồn mở của nó sống động đến vậy.

Đó cũng là lý do một dự án PHP thương mại phải đối mặt với bài toán bảo vệ khó hơn so với các dự án tương đương ở những nơi khác. Khoản đầu tư đổ vào một engine chuyên sâu và đặc thù — những năm làm việc theo tiêu chuẩn, các trường hợp biên, các bộ kiểm thử — nằm trong mã nguồn mà, theo mặc định, lưu hành ở dạng công khai. Khoản đầu tư đó là một bí mật thương mại: bí quyết thực tiễn nuôi sống quá trình phát triển liên tục, và là một tài sản mà luật pháp công nhận và bảo vệ. Bảo vệ nó không phải để giấu giếm người dùng; mà là để giữ cho công việc có thể tiếp tục được tài trợ.

Đây cũng là lý do vì sao việc bảo vệ mã nguồn đơn giản hơn trong những hệ sinh thái phát hành sản phẩm ở dạng đã biên dịch hoặc bytecode — Java là ví dụ phổ biến: hình thức được phân phối vốn đã cách một bước so với mã nguồn đang chạy, nên một nhà cung cấp thương mại có ít thứ phải canh giữ hơn. Điều đó khiến việc tài trợ cho các công cụ thương mại chuyên sâu và đặc thù ở đó trở nên thuận lợi hơn, trong khi rất nhiều công việc PHP nghiêm túc lại phải dựa vào thiện chí của cộng đồng mã nguồn mở. Chúng tôi không cho rằng đó là một quy luật tất yếu. PHP cũng xứng đáng có những công cụ chuyên nghiệp, được duy trì tích cực và đạt cấp độ tiêu chuẩn — và làm cho mã nguồn có thể phòng vệ được chính là điều khiến việc tài trợ cho công việc đó trở nên bền vững.

Câu trả lời của NextPDF là lõi mở với một phần premium trả phí. Engine mà bạn xây dựng trên đó — nextpdf/core — là Apache-2.0 và luôn mở; bạn có thể đọc, fork, và phát hành nó cho mục đích thương mại. NextPDF ProEnterprise là các phiên bản riêng tư, và doanh thu từ chúng chính là nguồn chi trả cho việc duy trì tích cực, sự tuân thủ tiêu chuẩn, và các tính năng tiếp theo. Sự phân tách đó là có chủ ý: nó cho phép chúng tôi phục vụ những đội ngũ cần các năng lực chuyên nghiệp cấp B2B vẫn thân thiện với lập trình viên cá nhân, bởi chính chúng tôi cũng khởi đầu là những lập trình viên đơn lẻ yêu thích phần mềm tự do. Lý do đằng sau nửa mở được trình bày trong Lõi mở, không khóa nhà cung cấp; trang này nói về cách nửa trả phí đến tay bạn.

Kênh ionCube — sự bảo vệ giúp giữ giá thấp

Phần tiêu đề “Kênh ionCube — sự bảo vệ giúp giữ giá thấp”

Với hầu hết khách hàng, kênh mã hóa bằng ionCube là lựa chọn mặc định. Việc mã hóa mã nguồn — một cách được công nhận để làm tăng chi phí can thiệp trái phép và chiếm dụng — cho phép chúng tôi bảo vệ mã premium với chi phí thấp hơn nhiều: ít phải xử lý mã nguồn theo cách riêng, ít quản trị phân phối và quyền truy cập, cùng gánh nặng pháp lý và thực thi nhẹ hơn so với việc canh giữ mã nguồn dạng văn bản ở quy mô lớn. Những khoản tiết kiệm đó là có thật, và chúng tôi chuyển chúng lại cho bạn.

Sự đánh đổi là một khoản chi phí lúc chạy (runtime) vừa phải: Loader giải mã các tệp đã mã hóa khi PHP chạy, điều này phát sinh thêm một chút hao tổn. Chúng tôi phản ánh sự đánh đổi đó vào giá để bạn có thể đánh giá nó một cách trung thực thay vì phát hiện ra về sau. Trên thực tế, hao tổn này thường nhỏ và thường không đáng kể trong các triển khai điển hình — và gần như không thành vấn đề trên một máy chủ vốn đã chạy ionCube Loader cho phần mềm khác. Các tải công việc nhạy cảm về hiệu năng nên đo chuẩn (benchmark) nó theo hồ sơ của riêng mình; với đại đa số các triển khai, kênh đã mã hóa đơn giản là lựa chọn có chi phí thấp hơn, đúng với sự khớp cung-cầu mà chúng tôi mong muốn. Thiết lập Loader là một bước thực hiện một lần, được hướng dẫn trong Thiết lập ionCube Loader.

Kênh mã nguồn đã ký — cho quy định, kiểm toán, và bảo đảm chuỗi cung ứng

Phần tiêu đề “Kênh mã nguồn đã ký — cho quy định, kiểm toán, và bảo đảm chuỗi cung ứng”

Một số khách hàng không thể chấp nhận mã đã mã hóa trong runtime của họ. Các tổ chức chịu sự quản lý chặt chẽ, hoặc có yêu cầu nghiêm ngặt về bảo mật chuỗi cung ứng và kiểm toán, cần đọc, xem xét, và xác minh thứ họ chạy — và họ thường có ngân sách tương xứng với những yêu cầu đó. Dành cho họ, chúng tôi cung cấp kênh mã nguồn dạng văn bản đã ký: chính các phiên bản đó được phân phối dưới dạng mã nguồn đọc được, được ký bằng mật mã để có thể xác minh nguồn gốc và tính toàn vẹn của nó.

Điều đó tương ứng trực tiếp với cách mà bảo mật chuỗi cung ứng hiện đại kỳ vọng phần mềm được xử lý: mã nguồn được phân phối trong một gói có chữ ký số, chữ ký được xác minh trước khi sử dụng, và mã nguồn có thể xem xét được ưu tiên hơn một sản phẩm mờ đục cho mục đích bảo đảm và kiểm toán (NIST SP 800-204D). Ở đây mã không được bảo vệ bằng mã hóa — nó được bảo vệ bằng luật pháp và hợp đồng: nó vẫn là bí mật thương mại mật của PATEON, công ty đứng sau NextPDF, và những gì bạn được phép và không được phép làm với nó được quy định bởi bản NextPDF Commercial License Agreement. Việc có thể đọc mã nguồn không bao giờ đồng nghĩa với việc được phép sao chép, phân phối lại, hay cấp phép lại nó.

Kênh này có giá cao hơn, và lý do thì ngược lại với kênh ionCube: nó loại bỏ hao tổn lúc chạy, nhưng lại dịch chuyển gánh nặng bảo vệ trở về hợp đồng, sự tin cậy, và quản trị — đó là chi phí mà chúng tôi gánh chịu để các khách hàng bị ràng buộc tuân thủ có thể đáp ứng nghĩa vụ của mình.

Khả năng kết nối và việc thực thi giấy phép

Phần tiêu đề “Khả năng kết nối và việc thực thi giấy phép”

Các kênh cũng khác nhau ở cách giấy phép được kiểm tra trong khi ứng dụng của bạn chạy, và với các triển khai ngoại tuyến hoặc cô lập mạng (air-gapped) thì đây thường là yếu tố quyết định.

Kênh ionCube xác minh giấy phép của nó định kỳ qua mạng. Một bản dựng premium được phân phối qua kênh đã mã hóa sẽ kiểm tra định kỳ với dịch vụ giấy phép của NextPDF theo một nhịp đều đặn — đại khái là một lần kiểm tra 7 ngày để gia hạn một lượt thuê (lease) khoảng 14 ngày. Chừng nào triển khai còn có thể kết nối tới dịch vụ trong cửa sổ đó, mọi thứ vẫn chạy bình thường. Nếu nó ở ngoại tuyến quá thời hạn thuê, các tính năng premium sẽ tạm dừng và engine quay về Core miễn phí — nó không dừng lại, báo lỗi, hay sập — và chúng tự động hoạt động trở lại ngay khi có kết nối. Lượt thuê qua mạng đó cũng chính là điều khiến số ghế (seat count) được cấp phép có thể được thực thi và cho phép một thu hồi (revocation) có hiệu lực trong cửa sổ thuê (khoảng 14 ngày, cộng thêm một khoảng ân hạn ngắn). Một lần kiểm tra chỉ gửi đi một mã định danh giấy phép và một băm dấu vân tay có thêm muối (salted fingerprint hash) — không bao giờ gửi nội dung tài liệu của bạn, và không bao giờ gửi dấu vân tay thô hay một địa chỉ IP.

Kênh mã nguồn đã ký có thể chạy hoàn toàn ngoại tuyến. Vì giấy phép đã ký của nó là một sản phẩm tự chứa (self-contained) mà engine xác minh cục bộ, kênh mã nguồn đã ký không cần kết nối định kỳ và phù hợp với các triển khai cô lập mạng (air-gapped), chỉ bị giới hạn bởi chính hiệu lực của giấy phép. Ở đây số ghế là một giới hạn theo hợp đồng được đặt ra bởi thỏa thuận của bạn thay vì được thực thi lúc chạy, một thu hồi có hiệu lực ở lần kiểm tra qua mạng kế tiếp hoặc qua một bản cập nhật sản phẩm, và một triển khai hoàn toàn ngoại tuyến sẽ không gửi gì cả.

Hai chiếc đồng hồ riêng biệt — đừng nhầm lẫn chúng. Lượt thuê ~14 ngày của kênh ionCube là về khả năng kết nối — một triển khai chịu được ở ngoại tuyến trong bao lâu. Nó độc lập với ~30 ngày ân hạncả hai kênh đều dành cho sau ngày kết thúc của một gói đăng ký, trong khoảng thời gian đó các tính năng premium vẫn hoạt động trong khi bạn gia hạn trước khi engine quay về Core. Một lượt thuê hết hạn và một gói đăng ký hết hạn là hai sự kiện khác nhau trên những đồng hồ khác nhau.

Dù bạn chạy kênh nào, chế độ hỏng hóc đều giống nhau và luôn an toàn: NextPDF hạ cấp xuống Core mã nguồn mở, miễn phí. Nó không bao giờ tự khóa cứng, không bao giờ khóa bạn ra khỏi phần mềm mà bạn đã triển khai, và không bao giờ dừng lại giữa chừng.

Hai kênh không phải là hai sản phẩm. Chúng mang lại các quyền theo giấy phép giống hệt nhau và cùng một phần mềm; sự khác biệt nằm ở cách mã nguồn được bảo vệ, cách giấy phép được kiểm tra lúc chạy, và điều đó tốn bao nhiêu:

Mã hóa bằng ionCubeMã nguồn dạng văn bản đã ký
Thứ bạn chạyPHP đã mã hóa, qua ionCube LoaderMã nguồn PHP có thể đọc được, đã ký
Cách mã nguồn được bảo vệMã hóa (một biện pháp công nghệ) cộng với giấy phépGiấy phép và luật bí mật thương mại (không mã hóa)
Phù hợp nhất choHầu hết các triển khai; chi phí thấp nhấtNhu cầu chịu quản lý / kiểm toán / bảo mật chuỗi cung ứng
Chi phí lúc chạyMột chút hao tổn của Loader (thường không đáng kể; đo chuẩn nếu nhạy cảm về hiệu năng)Không có thêm từ phía chúng tôi
Kiểm tra giấy phép qua mạngĐịnh kỳ (~kiểm tra 7 ngày, thuê ~14 ngày)Tùy chọn; xác minh cục bộ và chạy ngoại tuyến
Ngoại tuyến / cô lập mạngTối đa đến cửa sổ thuê, sau đó các tính năng premium tạm dừng về Core (tự động hoạt động lại khi kết nối lại)Được hỗ trợ đầy đủ; không cần kết nối định kỳ
Số ghếĐược thực thi thông qua lượt thuê qua mạngTheo hợp đồng (theo thỏa thuận của bạn); không được thực thi lúc chạy
Thu hồi có hiệu lựcTrong cửa sổ thuê (~14 ngày + ân hạn ngắn)Ở lần kiểm tra qua mạng kế tiếp, hoặc qua một bản cập nhật sản phẩm
Dữ liệu giấy phép được gửiChỉ mã định danh giấy phép + băm dấu vân tay có muối (không bao giờ gửi nội dung, IP, hay dấu vân tay thô)Không gửi gì khi hoàn toàn ngoại tuyến
QuyềnGiống hệt — xem EULAGiống hệt — xem EULA

Giá phản ánh sự đánh đổi giữa bảo vệ và runtime đó, chứ không phải một khoảng cách về tính năng. Để biết giá và các phiên bản hiện hành, xem Mua và cấp phép và trang giá được liên kết từ đó; trang tài liệu này cố ý không nhắc lại giá hay các điều khoản giấy phép.

Chúng tôi mong muốn hệ sinh thái PHP có thêm nhiều công cụ nghiêm túc, được tài trợ tốt và được duy trì chuyên nghiệp — và bớt đi những dự án âm thầm kiệt sức vì không có cách bền vững nào để tài trợ cho chiều sâu mà chúng cần. Bảo vệ mã nguồn chính là điều cho phép chúng tôi đầu tư vào chiều sâu đó trong khi vẫn giữ lõi mở và kênh đã mã hóa ở mức giá phải chăng. Và vì sự tin cậy phải được tạo dựng, chúng tôi cố gắng minh bạch về đúng điều này: mỗi kênh bảo vệ điều gì, nó tốn bao nhiêu của bạn, và vì sao — để sự đánh đổi là điều bạn cân nhắc, chứ không phải điều chúng tôi che giấu.