Giấy phép thành viên là gì?
Giấy phép thành viên là một khóa sản phẩm gắn với tư cách thành viên còn hiệu lực thay vì với một lần mua. Bản plugin, script hay bot của bạn trong tay thành viên kiểm tra khóa theo lịch: nó hoạt động khi tư cách thành viên còn, ngừng khi tư cách thành viên kết thúc, và hoạt động trở lại nếu họ tham gia lại. Tư cách thành viên chính là giấy phép. Đó là câu Nadi dùng để nói về nó: tư cách thành viên của bạn chính là giấy phép.
Vì sao cần đến điều này
Ai bán một sản phẩm chạy được — một plugin cho ứng dụng thiết kế, một script, một bot, một công cụ web nhỏ — đều biết sự mất cân đối này. Việc bán diễn ra một lần còn công việc thì không bao giờ dừng: một bản cập nhật sau mỗi lần ứng dụng chủ ra phiên bản mới, những câu hỏi, những bản sửa lỗi, và một người mua từ hai năm trước vẫn còn viết thư cho bạn.
Gói định kỳ giải quyết được chuyện tiền nong nhưng để ngỏ một câu hỏi: điều gì khiến gói định kỳ đáng để gia hạn? Nếu sản phẩm vẫn chạy trong tay người đã thôi trả tiền, thì gia hạn chỉ là quyên góp.
Giấy phép thành viên buộc hai đầu lại với nhau. Khi người đó còn là thành viên, bản của họ chạy. Khi tư cách thành viên kết thúc, nó dừng. Khi họ quay lại, nó chạy tiếp. Phần mềm chuyên nghiệp lớn đã hoạt động theo cách này nhiều năm nay; điều mới hơn là gắn khóa với tư cách thành viên trong một cộng đồng thay vì với một lần mua duy nhất.
Cách hoạt động: một khóa, một bước kiểm tra và một khoảng ân hạn
Ba mảnh ghép, và mỗi mảnh giải quyết một vấn đề hiển nhiên.
- Khóa. Một chuỗi ký tự ngẫu nhiên dài, thuộc về một thành viên và một sản phẩm. Một nền tảng cẩn thận lưu nó ở dạng đã xáo trộn chứ không phải nguyên văn, để không ai đọc cơ sở dữ liệu mà đọc được các khóa.
- Bước kiểm tra. Sản phẩm của bạn gửi khóa tới một địa chỉ và nhận lại một câu trả lời ngắn: hợp lệ hoặc không hợp lệ. Vài dòng mã trong sản phẩm của bạn, và bạn không phải vận hành máy chủ nào.
- Khoảng ân hạn. Mỗi câu trả lời «có» đi kèm một hạn dùng có chữ ký. Sản phẩm giữ sự chấp thuận đó trong khoảng thời gian ấy và không hỏi lại cho đến khi nó hết hạn, nên nó vẫn chạy ngoại tuyến. Chữ ký ngăn bất kỳ ai sửa một tệp trên máy của mình để kéo dài thời hạn.
Khoảng ân hạn là thứ khiến ý tưởng này dùng được. Không có nó, kết nối internet trở thành điều kiện bắt buộc để chạy sản phẩm, và khách hàng của bạn phải ngừng làm việc khi ngồi trên máy bay. Có nó, trường hợp xấu nhất là một người đã rời đi vẫn dùng được thêm vài ngày — một cái giá rất công bằng cho một sản phẩm không bị hỏng.
Câu hỏi quan trọng nhất: chuyện gì xảy ra khi máy chủ giấy phép ngừng hoạt động
Đây là điều phân biệt một thiết kế đáng tin với một thiết kế không đáng tin. Sản phẩm của bạn hỏi, và không có câu trả lời: kết nối bị rớt, nền tảng đang sập, phản hồi quá thời gian chờ. Sản phẩm nên làm gì?
Nó nên tiếp tục chạy. Chỉ một lời từ chối rõ ràng — một câu trả lời nói rõ khóa này đã bị thu hồi hoặc không xác định — mới được phép dừng sản phẩm. Im lặng, lỗi và hết thời gian chờ không phải là lời từ chối, và coi chúng là lời từ chối nghĩa là sự cố của người khác làm hỏng sản phẩm của bạn ngay trước mặt khách hàng.
Gói trong một dòng: còn nghi ngờ thì cứ mở, chắc chắn rồi mới đóng. Hãy hỏi đúng về hành vi này trước khi xây trên bất kỳ nền tảng nào, và đọc đoạn mã mà bạn được bảo dán vào sản phẩm. Nếu nó coi lỗi mạng là thu hồi, thì uy tín của bạn sẽ là thứ phải trả giá.
Thứ gì có thể cấp phép một cách trung thực, và thứ gì không
Ranh giới rất đơn giản: thứ chạy được thì cấp phép được, thứ không chạy thì không. Một bước kiểm tra là sản phẩm gọi điện về nhà, mà một tệp tĩnh thì không gọi được đi đâu cả.
- Một plugin, một script, một ứng dụng, một bot: nó thực thi, nên nó hỏi được, và bạn có thể khiến nó ngừng chạy. Cấp phép ở đây là thật.
- Một hình ảnh, một tệp âm thanh, một tài liệu, một gói preset: tải về một lần và giữ luôn. Không có gì trong đó hỏi ai điều gì, và không có cách nào lấy lại sau đó.
Vì vậy gọi một tệp tĩnh là có giấy phép là một lời khẳng định không ai thực thi được. Cơ chế trung thực cho những thứ đó là chính cánh cửa: tư cách thành viên là thứ cho phép tải về, và người rời đi sẽ không nhận được phiên bản tiếp theo. Điều đó đúng và hữu ích — chỉ là nó không phải giấy phép, và không bao giờ nên được bán như một giấy phép.
Nên hỏi gì ở bất kỳ nền tảng nào
Sáu câu hỏi là đủ để đánh giá bất kỳ cách triển khai nào của ý tưởng này:
- Khóa có chết cùng lúc với tư cách thành viên không, hay theo chu kỳ hằng tháng hoặc một tác vụ chạy hằng đêm?
- Nếu thành viên quay lại, khóa cũ của họ có quay lại không, hay họ phải dán khóa mới vào sản phẩm của bạn?
- Khoảng ân hạn dài bao lâu, ai đặt nó, và câu trả lời có được ký để không thể giả mạo không?
- Endpoint nói gì khi nền tảng sập: «tôi không trả lời được», hay «không hợp lệ»?
- Tích hợp mất bao nhiêu dòng mã, và bạn có cần máy chủ hay cơ sở dữ liệu riêng không?
- Công tắc giấy phép có được đưa ra cho cả những thứ không bao giờ thực thi được không? Một nền tảng cho phép bạn cấp phép một tệp tĩnh là đang bán cho bạn một vẻ bề ngoài, không phải một cơ chế.
Ví dụ cụ thể: Nadi làm thế nào
Nadi là một nền tảng cộng đồng, nên đây là phần chúng tôi mô tả sản phẩm của chính mình. Chỉ những gì nó làm được hôm nay.
- Chủ cộng đồng đánh dấu một mục trong thư viện của cộng đồng là có giấy phép, và mỗi thành viên nhận một khóa riêng, hiện trên thẻ của mục kèm nút sao chép.
- Khóa xác thực được khi tư cách thành viên còn sống, và hiện REVOKED ngay khi tư cách đó chết — dù thành viên tự rời đi, bị xóa, hay gói định kỳ của họ hết hạn.
- Khi họ tham gia lại, chính dòng đó sống lại, nên không ai phải dán khóa mới vào đâu cả.
- Tích hợp chỉ khoảng mười dòng trong sản phẩm của bạn. Nó kiểm tra khóa mỗi tuần một lần và vẫn hoạt động ngoại tuyến giữa các lần.
- Khoảng ân hạn mặc định là bảy ngày, và câu trả lời có chữ ký, nên sản phẩm của bạn phân biệt được mã ân hạn của chúng tôi với một tệp mà ai đó tự sửa trên máy mình.
- Endpoint gặp lỗi thì để mở. Khi không trả lời được, chúng tôi nói đúng như vậy, và không bao giờ nói «không hợp lệ» thay vào đó. Một sự cố phía chúng tôi không bao giờ được khoác áo một lần thu hồi.
- Chủ cộng đồng thấy ai đang dùng mục đó, trạng thái của từng người giữ khóa — đang chạy hay đã dừng — và lần cuối sản phẩm của họ điểm danh là khi nào.
- Phát hành phiên bản mới của mục chỉ báo cho những người giữ khóa, không báo cho cả cộng đồng.
- Thông báo từ chối mà một thành viên đã hết hạn nhìn thấy có ghi tên cộng đồng và nói điều gì đưa sản phẩm trở lại: tham gia lại cộng đồng đó.
Nói thật về giới hạn
Không thứ gì trên Nadi được gọi là có giấy phép cho đến khi nó chứng minh được điều đó. Công tắc tắt sẵn trên mọi mục, tệp hay liên kết, cho đến khi chính sản phẩm của mục đó gọi bước kiểm tra của chúng tôi với một khóa thật ít nhất một lần — sản phẩm phải trình diễn cơ chế trước mặt chúng tôi rồi chữ «Có giấy phép» mới được phép xuất hiện trên trang của nó. Vì vậy, một tệp mà thành viên tải về và không bao giờ được nối với bước kiểm tra sẽ không bao giờ được gọi là có giấy phép ở bất cứ đâu trong sản phẩm của chúng tôi; cơ chế trung thực của nó là cánh cửa, nơi tư cách thành viên là thứ cho phép tải về. Tắt giấy phép thì lúc nào cũng được.
Lỗi thì để mở là một cam kết chứ không phải một lỗ hổng. Endpoint trả lời «không khả dụng» khi nó không truy vấn được cơ sở dữ liệu, và đoạn mã chúng tôi đưa bạn coi mọi thứ không phải câu trả lời rõ ràng là sự cho phép tiếp tục chạy. Nghĩa là một người đã rời đi có thể vẫn dùng được cho đến khi khoảng ân hạn của họ hết, và chúng tôi cố ý chấp nhận điều đó: sản phẩm của người khác không được hỏng chỉ vì một lần triển khai của chúng tôi bị trục trặc.
Hai giới hạn cuối cùng. Khóa đi kèm tư cách thành viên, và hiện không có cách nào giữ một khóa mà không tham gia. Và một khóa bị chia sẻ thì vẫn là một khóa gắn với một tư cách thành viên — nó dừng khi tư cách thành viên đó dừng.