Jak efektywnie licencjonować oprogramowanie? Cz. 1

Jak efektywnie licencjonować oprogramowanie? Cz. 1

Dzisiejsze oprogramowanie, niezależnie od tego, czy są to aplikacje desktopowe, systemy wbudowane czy rozwiązania chmurowe, wymaga skutecznego modelu licencjonowania. Daje Ci to kontrolę nad dostępem do aplikacji, ochronę przed nieautoryzowanym użyciem i elastyczność we wdrażaniu różnych modeli biznesowych.

Jednym z kluczowych narzędzi jest AxProtector. Umożliwia on automatyczne szyfrowanie aplikacji i integrację mechanizmów licencjonowania. W tym artykule omówimy techniczne aspekty wdrożenia licencjonowania z jego wykorzystaniem.

Podstawowe pojęcia

Każda licencja jest przypisana zawsze do swojego dostawcy (twórcy), który ma swój unikalny numer, tak zwany Firm Code. Kod ten jest nadawany przez Wibu-Systems i dystrybuowany pod nazwą Firm Security Box (FSB). FSB może być kluczem sprzętowym CmDongle lub kontenerem CmCloudContainer.

W FSB poza Firm Code są zapisane klucze kryptograficzne, które będą używane do podpisywania i szyfrowania oprogramowania oraz do tworzenia licencji. Firm Code jest uwidoczniony na / w FSB, dzięki czemu identyfikuje dostawcę. Natomiast klucze kryptograficzne są bezpiecznie przechowywane w sprzęcie lub w chmurze i nie można ich odczytać.

Rysunek 1. Rodzaje Firm Security Box

Kod produktu (Product Code) jest definiowany przez dostawcę. Jest to liczba całkowita bez znaku (UInt32), w zakresie od 1 do 4 294 967 295. Do każdego Kodu Produktu CodeMeter przypisuje jego własny klucz kryptograficzny (Product Item Secret Key), który następnie użyty będzie do zaszyfrowania całego oprogramowania lub jego części. Product Item Secret Key tworzony jest w oparciu o klucze kryptograficzne zapisane w FSB.

Rozróżniamy dwa podejścia w definiowaniu kodów produktów:

  • Podejście oparte na funkcjonalnościach (perspektywa techniczna)
  • Podejście oparte na pakietach (perspektywa biznesowa)

Jeśli oprogramowanie jest sprzedawane w całości, bez wydzielania modułów, producent definiuje jeden kod produktu i używa go do szyfrowania oprogramowania i tworzenia licencji. Większość oprogramowania jest jednak sprzedawana w modułach. Oznacza to, że istnieje potrzeba, aby konfigurować różne pakiety i sprzedawać je indywidualnie swoim odbiorcom. W jednych zastosowaniach licencjonowane są poszczególne funkcjonalności. W innych pakiety, które składają się z wybranych funkcjonalności.

Podejście oparte na funkcjonalnościach

W podejściu opartym na funkcjonalnościach dostawca definiuje kod produktu (PC) osobno dla każdej funkcji. Dzięki temu implementacja licencjonowania w oprogramowaniu staje się przejrzysta i oszczędna. Programista identyfikuje kod funkcji (Rys. 2) i chroni go za pomocą kodu produktu (PC).

Obraz zawierający tekst, zrzut ekranu, oprogramowanie, Strona internetowa

Zawartość wygenerowana przez sztuczną inteligencję może być niepoprawna.
Rysunek 2. Przypisanie Product Code (przyporządkowany do LL1) do funkcji ChangeFont

Następnie na etapie tworzenia licencji product manager definiuje pakiet i przypisuje mu wszystkie kody produktów.

Obraz zawierający tekst, zrzut ekranu, numer, Czcionka

Zawartość wygenerowana przez sztuczną inteligencję może być niepoprawna.
Rysunek 3. Listy licencji z przypisanymi funkcjonalnościami aplikacji

To podejście ma tę zaletę, że menedżerowie produktu mogą zmieniać skład pakietów nawet po wydaniu oprogramowania. Z drugiej strony licencje stają się przez to złożone co komplikuje zadanie zarządzania nimi z uwagi na dużą liczbę możliwych kombinacji.

Podejście oparte na pakietach

W tym wypadku producent definiuje kod produktu (PC) osobno dla każdego pakietu, który będzie sprzedawany. To upraszcza proces tworzenia licencji, ponieważ każdy klient używa pakietu, który ma przypisany dokładnie jeden kod produktu.

Przyporządkowanie funkcjonalności do pakietu odbywa się na poziomie kodu. Programista musi zidentyfikować kod funkcji, określić pakiety, w których dana funkcja występuje, i zabezpieczyć funkcję, wykorzystując alternatywnie wszystkie Product Codes przypisane do tych pakietów.

Obraz zawierający tekst, zrzut ekranu, numer, Czcionka

Zawartość wygenerowana przez sztuczną inteligencję może być niepoprawna.
Rysunek 4. Listy licencji z przypisanymi pakietami aplikacji

Weryfikacji podlegają tylko zdefiniowane pakiety, jednak pakiet musi być określony przed implementacją. Dzięki temu podejściu aktualizacja licencji jest łatwiejsza. Ponadto zapewnia lepszą kompatybilność w przypadku zmian wybranych funkcji podczas aktualizacji. Każda wersja oprogramowania „wie”, które funkcje są zawarte w danym pakiecie, i działa zgodnie z tymi ustawieniami.

Listy licencji

Listy licencji są funkcją pomocniczą w AxProtector, stworzoną w celu uproszczenia wdrażania podejścia opartego na pakietach. Są one również pomocne przy migracji do innego Firm Code, co wykracza poza zakres tego artykułu.

W przypadku oprogramowania sprzedawanego jako jedna całość, bez wyróżniania wariantów, istnieje dokładnie jedna lista licencji „0”, z dokładnie jednym kodem produktu (jeden wpis licencji).

W przypadku podejścia opartego na funkcjonalnościach istnieje wiele list licencji (Rys. 3), po jednej na każdą funkcjonalność, z których każda zawiera dokładnie jeden kod produktu (jeden wpis licencji).

W przypadku podejścia opartego na pakietach istnieje również wiele list licencji, po jednej dla każdej funkcjonalności. Każda lista licencji zawiera kody produktów (wpisy licencyjne) wszystkich pakietów, w których ta funkcjonalność jest zawarta.

Przykładem może być wewnętrzna licencja demonstracyjna NFR (not-for-resale). W tym przypadku kod produktu dla licencji NFR jest zawarty na każdej liście licencji, dzięki czemu wszystkie funkcje są dostępne do celów demonstracyjnych.

Lista licencji 0 to specjalna lista licencji, która jest używana dla całej aplikacji lub przynajmniej wszystkich funkcji, w których nie zdefiniowano innej listy licencji. Zazwyczaj jest ona sprawdzana podczas uruchamiania aplikacji.

Jak efektywnie licencjonować oprogramowanie?
Wielu producentów oprogramowania staje w pewnym momencie przed barierą: z jednej strony rozwój funkcji, segmentów klientów i modeli sprzedaży, z drugiej – sztywny, jednowariantowy model licencji, który trudno rozbudować, aktualizować i bezpiecznie egzekwować. System rośnie, a licencjonowanie zaczyna