Skip to main content

QCOS Licensing Design Document

Version: 1.0 Status: APPROVED Author: SoftQuantus Engineering Date: December 2024


Executive Summary​

This document describes the technical architecture for QCOS binary distribution and license management. QCOS is delivered exclusively as binary artifacts (containers, VM images, libraries) with cryptographic license enforcement.

Key Principles​

  1. Binary-Only Distribution: QCOS source code is never distributed. All deliverables are pre-compiled binaries.
  2. Cryptographic License Enforcement: Licenses are digitally signed and verified at runtime.
  3. Offline-First: The system works completely offline for air-gapped environments (HPC, government, defense).
  4. Enterprise Control: Customers manage licenses through a secure portal with full audit trails.

1. Distribution Architecture​

1.1 Artifact Types​

FormatUse CaseDelivery
OCI ContainerCloud, Kubernetes, HPCRegistry pull or tar export
VM ImageOn-prem hypervisorsPortal download
Shared LibraryOEM integrationPortal download
SDK/WheelDevelopment toolsPublic PyPI (open)

1.2 Container Registry​

Primary Registry: registry.softquantus.com

registry.softquantus.com/
β”œβ”€β”€ softqcos/
β”‚ β”œβ”€β”€ core:<version> # QCOS Kernel + Runtime
β”‚ β”œβ”€β”€ autopilot:<version> # Autopilot Optimization Engine
β”‚ β”œβ”€β”€ license-server:<version> # On-prem license management
β”‚ β”œβ”€β”€ benchmark-suite:<version> # Benchmarking tools
β”‚ └── hal-<vendor>:<version> # Hardware Abstraction Layers
β”‚ β”œβ”€β”€ hal-ibm
β”‚ β”œβ”€β”€ hal-iqm
β”‚ β”œβ”€β”€ hal-pasqal
β”‚ β”œβ”€β”€ hal-quantinuum
β”‚ └── hal-generic

1.3 Version Tagging​

<major>.<minor>.<patch>[-<customer>]

Examples:
1.0.0 # General release
1.0.0-ibm # IBM-specific build (HAL included)
1.0.0-lts # Long-term support

2. License File Format​

2.1 Structure​

Licenses are JSON files with cryptographic signatures:

{
"version": "1.0",
"format": "softquantus-license-v1",
"grant": {
"license_id": "QCOS-20241201-ABCD1234",
"customer_id": "IBM-001",
"customer_name": "IBM Corporation",
"contract_id": "QSOFT-IBM-EP-2024-001",
"product": "QCOS",
"version": {
"major": 1,
"minor_min": 0,
"minor_max": 99
},
"license_type": "enterprise_platform",
"sla_tier": "platinum",
"modules": ["kernel", "autopilot", "hal_ibm", "benchmarking"],
"environments": ["ibm-hpc-east", "ibm-hpc-west"],
"validity": {
"issued_at": "2024-12-01T00:00:00Z",
"valid_from": "2024-12-01",
"valid_until": "2026-12-31"
},
"features": {
"autopilot_enabled": true,
"benchmark_suite_enabled": true,
"max_qubits": 127,
"max_backends": 20,
"max_concurrent_jobs": 100
}
},
"signature": "<base64-encoded-rsa-pss-signature>",
"public_key_id": "a1b2c3d4e5f6"
}

2.2 Cryptography​

ComponentAlgorithm
Key TypeRSA-4096
SignatureRSA-PSS with SHA-256
Key StorageHSM (production)

2.3 License ID Format​

QCOS-<YYYYMMDD>-<RANDOM8>

Example: QCOS-20241201-ABCD1234

3. License Enforcement​

3.1 Runtime Validation Flow​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ QCOS Startup β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Load Public Key (embedded in binary or /etc/softqcos/license.pub) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Load License File β”‚
β”‚ - QCOS_LICENSE_FILE env var β”‚
β”‚ - /etc/softqcos/license.lic β”‚
β”‚ - ~/.softqcos/license.lic β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Verify Signature β”‚
β”‚ - Extract grant JSON β”‚
β”‚ - Verify RSA-PSS signature β”‚
β”‚ - Check key ID matches embedded key β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ INVALID β”‚ β”‚ VALID β”‚
β”‚ β†’ EXIT 1 β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Check Validity Dates β”‚
β”‚ - Not before valid_from β”‚
β”‚ - Not after valid_until β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Check Version Compatibility β”‚
β”‚ - Major version match β”‚
β”‚ - Minor within range β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Check Environment (if set) β”‚
β”‚ - Hostname in allowed list β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Load Features & Limits β”‚
β”‚ - max_qubits β”‚
β”‚ - max_backends β”‚
β”‚ - enabled modules β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ“ QCOS Ready β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 Module Enforcement​

Each QCOS module checks its own license at initialization:

from licensing.client import require_module, Module

class AutopilotEngine:
def __init__(self):
require_module(Module.AUTOPILOT) # Raises if not licensed
...

3.3 Feature Limits​

Runtime enforcement of licensed limits:

def submit_job(circuit, shots):
ctx = get_license_context()

if circuit.num_qubits > ctx.features.max_qubits:
raise LicenseError(f"Circuit exceeds licensed qubit limit ({ctx.features.max_qubits})")

if shots > ctx.features.max_shots_per_job:
raise LicenseError(f"Shots exceed licensed limit ({ctx.features.max_shots_per_job})")

4. License Server (Enterprise)​

4.1 Purpose​

For large deployments, customers can run a License Server inside their datacenter to:

  • Centralize license management
  • Enforce seat/concurrent usage limits
  • Enable license updates without redeploying QCOS

4.2 Architecture​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Customer Datacenter β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ License Server β”‚ β”‚ QCOS Nodes β”‚ β”‚
β”‚ β”‚ (softqcos-license- │◄───►│ - softqcos-core β”‚ β”‚
β”‚ β”‚ server:1.0.0) β”‚ β”‚ - softqcos-autopilot β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ - softqcos-hal-ibm β”‚ β”‚
β”‚ β”‚ *.lic files β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ license.pub β”‚ β”‚ (checkout license at startup) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”‚ (no internet required) β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.3 API Endpoints​

EndpointMethodDescription
/validatePOSTValidate license
/checkoutPOSTAcquire license seat
/releasePOSTRelease license seat
/heartbeatPOSTMaintain seat checkout
/status/{id}GETGet license status

4.4 Seat Management​

License: max_concurrent_jobs = 100

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Active Seats: 45/100 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ node-01 β”‚ autopilot β”‚ checked out 2h β”‚
β”‚ node-02 β”‚ core β”‚ checked out 1h β”‚
β”‚ node-03 β”‚ benchmark β”‚ checked out 4h β”‚
β”‚ ... β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5. Enterprise Portal​

5.1 Customer Portal​

URL: https://portal.softquantus.com

Features:

  • View contracts and products
  • Download license files
  • Access release artifacts
  • Generate registry credentials
  • View usage/audit logs

5.2 Portal Architecture​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ SoftQuantus Cloud β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Portal UI β”‚ β”‚ Portal API β”‚ β”‚ Container Registry β”‚ β”‚
β”‚ β”‚ (React/Vue) │──►│ (FastAPI) │──►│ (registry.soft...) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β–Ό β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ License DB β”‚ β”‚ Artifact Storage β”‚ β”‚
β”‚ β”‚ (Postgres) β”‚ β”‚ (Azure Blob/S3) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.3 Authentication​

  • SSO integration (Azure AD, Okta, etc.)
  • Per-customer user management
  • Role-based access (admin, download-only, view-only)

6. Delivery Workflow​

6.1 New Customer Onboarding​

1. Contract Signed
β”‚
β–Ό
2. Create Customer in Portal
- customer_id: IBM-001
- tier: enterprise
- contacts
β”‚
β–Ό
3. Create Contract Record
- contract_id: QSOFT-IBM-EP-2024-001
- products: [QCOS-EP, QCOS-BENCH]
- modules: [kernel, autopilot, hal_ibm, benchmarking]
- term: 2024-2026
β”‚
β–Ό
4. Generate License
- Run: softqcos-license generate --customer-id IBM-001 ...
- Output: IBM_qcos_enterprise_2024.lic
β”‚
β–Ό
5. Upload License to Portal
- Customer can download from portal
β”‚
β–Ό
6. Generate Registry Credentials
- Customer receives docker login command
β”‚
β–Ό
7. Customer Deploys QCOS
- Pull images or load tars
- Mount license file
- Start services

6.2 Air-Gapped Delivery​

For environments without internet:

1. Package Artifacts
$ ./scripts/build_binaries.sh package IBM kernel,autopilot,hal_ibm

Output: dist/customers/IBM/
β”œβ”€β”€ softqcos-core-1.0.0.tar.gz
β”œβ”€β”€ softqcos-license-server-1.0.0.tar.gz
β”œβ”€β”€ softqcos-hal-ibm-1.0.0.tar.gz
β”œβ”€β”€ MANIFEST.json
β”œβ”€β”€ SHA256SUMS
└── install.sh

2. Secure Transfer
- USB/physical media
- Secure file transfer
- VPN upload to customer

3. Customer Installation
$ ./install.sh
β†’ docker load -i softqcos-core-1.0.0.tar.gz
β†’ docker load -i softqcos-license-server-1.0.0.tar.gz
...

4. License Activation
- Copy license.lic to /etc/softqcos/
- Copy license.pub to /etc/softqcos/
- Start services

7. Security Considerations​

7.1 Key Management​

KeyLocationAccess
Private KeyHSM / Secure VaultLicense Authority only
Public KeyEmbedded in binariesAll QCOS instances

7.2 License File Security​

  • Licenses are signed, not encrypted (contents are readable)
  • Customer-specific data (limits, modules) is visible
  • Financial terms are never in license files
  • Signature prevents tampering

7.3 Binary Protection​

  • Binaries are not obfuscated (standard Python wheel/containers)
  • Protection is through license enforcement, not obscurity
  • All critical paths check license validity
  • Consider PyInstaller/Nuitka for additional compilation in future

7.4 Audit Trail​

Portal and License Server log:

  • License generation events
  • Download events
  • Checkout/release events
  • Authentication events

8. Operations​

8.1 License Revocation​

To revoke a license:

  1. Mark license as revoked in portal database
  2. If customer uses License Server:
    • Push updated license file to customer
    • License Server reloads and rejects revoked license
  3. If customer uses local file:
    • Next version of QCOS checks revocation list (future)
    • Or: wait for expiry

8.2 License Renewal​

1. Customer contract renewed
β”‚
β–Ό
2. Generate new license with extended validity
- Same license_id prefix
- New valid_until date
β”‚
β–Ό
3. Customer downloads new .lic file
β”‚
β–Ό
4. Customer replaces old file or reloads License Server

8.3 Version Upgrades​

Major Version (1.x β†’ 2.x):
- May require new license with version.major = 2
- Commercial upgrade discussion

Minor Version (1.0 β†’ 1.5):
- Works if version_minor_max >= 5
- No license change needed

Patch Version (1.0.0 β†’ 1.0.5):
- Always compatible
- No license change needed

9. Implementation Status​

Phase 1 (Current) βœ…β€‹

  • License file format definition
  • License Authority (signing)
  • License Validator (verification)
  • CLI tool for license generation
  • Basic runtime validation

Phase 2 (Q1 2025)​

  • License Server deployment
  • Portal backend API
  • Container registry setup
  • Customer onboarding workflow

Phase 3 (Q2 2025)​

  • Portal frontend UI
  • SSO integration
  • Usage analytics
  • Revocation list support

10. Appendix​

A. Environment Variables​

VariableDescriptionDefault
QCOS_LICENSE_FILEPath to license file/etc/softqcos/license.lic
QCOS_LICENSE_PUBLIC_KEYPath to public key/etc/softqcos/license.pub
QCOS_LICENSE_SERVERLicense server URL(none)
QCOS_LICENSE_IDLicense ID for server mode(none)
QCOS_LICENSE_API_TOKENAPI token for server(none)
QCOS_ENVIRONMENTEnvironment namehostname
QCOS_VERSION_MAJORMajor version1
QCOS_VERSION_MINORMinor version0

B. File Locations​

/etc/softqcos/
β”œβ”€β”€ license.lic # License file
β”œβ”€β”€ license.pub # Public key
└── licenses/ # For License Server: multiple licenses

~/.softqcos/
β”œβ”€β”€ license.lic # User-level license (fallback)
└── license.pub # User-level public key (fallback)

C. Error Messages​

ErrorCauseSolution
"Invalid license signature"Tampering or wrong keyRedownload license
"License expired"Past valid_untilRenew contract
"License not yet valid"Before valid_fromWait or check date
"Version mismatch"QCOS version not coveredUpgrade license or downgrade QCOS
"Module not licensed"Using unlicensed featureUpgrade license
"All seats in use"Concurrent limit reachedRelease other seats or upgrade

Document History​

VersionDateAuthorChanges
1.02024-12-09EngineeringInitial release

Β© 2024 SoftQuantus. Confidential and Proprietary.