# NETGESCON - GESTIONE LICENZE OPEN SOURCE

## 📋 OVERVIEW
Analisi e definizione della strategia di licenza per NetGesCon: software gratuito ma con protezioni anti-commercializzazione non autorizzata. Studio del modello dual-license con versione Open Source e versione PRO.

## 📜 MODELLO DI RIFERIMENTO

### Esempio: "Gestionale Open" - Licenza Ibrida
```
Gestionale Open è l'implementazione proprietaria del software Open Source omonimo,
copyright di Alessandro Carrara, rilasciato con Licenza BSD semplificata / FreeBSD.

SORGENTI: Disponibili liberamente, senza vincoli di nessun tipo
ESEGUIBILI: Disponibili gratuitamente per uso personale
DATABASE: Prodotto proprietario, autorizzazione richiesta per distribuzione
VERSIONE PRO: Contratto commerciale con servizi aggiuntivi
```

## 🎯 OBIETTIVI NETGESCON

### Cosa VOGLIAMO
- ✅ **Software gratuito** per amministratori di condominio
- ✅ **Codice sorgente aperto** per trasparenza e contributi
- ✅ **Modifiche e miglioramenti** dalla community
- ✅ **Installazione libera** su server propri
- ✅ **Studio e apprendimento** del codice

### Cosa NON VOGLIAMO  
- ❌ **Rivendita commerciale** non autorizzata
- ❌ **SaaS commerciale** basato su NetGesCon
- ❌ **White-label** commerciale senza autorizzazione
- ❌ **Supporto gratuito** illimitato
- ❌ **Garanzie** su funzionamento

## 📄 STRATEGIA DUAL-LICENSE

### 1. NetGesCon COMMUNITY (Open Source)
**Licenza:** Custom Open Source basata su BSD/MIT

```markdown
# LICENZA NETGESCON COMMUNITY EDITION

Copyright (c) 2025 Michele [Cognome] e Contributors

## PERMESSI CONCESSI
- ✅ Uso privato e commerciale del software
- ✅ Modifica del codice sorgente  
- ✅ Distribuzione del software modificato
- ✅ Creazione di opere derivate
- ✅ Uso in progetti open source

## CONDIZIONI OBBLIGATORIE
- 📋 Mantenimento di questo copyright notice
- 📋 Inclusione di questa licenza in tutte le copie
- 📋 Attribuzione agli autori originali
- 📋 Disclosure del codice sorgente se distribuito

## LIMITAZIONI COMMERCIALI
- ❌ VIETATA la rivendita come SaaS senza autorizzazione scritta
- ❌ VIETATO l'uso del nome "NetGesCon" in servizi commerciali
- ❌ VIETATA la rimozione dei credits e copyright
- ❌ VIETATA la distribuzione con database proprietario incluso

## ECCEZIONI PER USO COMMERCIALE
Per usi commerciali (SaaS, hosting, rivendita) è richiesta:
- Autorizzazione scritta esplicita da Michele [Cognome]
- Revenue sharing o licensing fee da concordare
- Uso del marchio "Powered by NetGesCon"

## DISCLAIMER
IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA GARANZIE DI ALCUN TIPO.
GLI AUTORI NON SONO RESPONSABILI PER DANNI DERIVANTI DALL'USO.
```

### 2. NetGesCon PRO (Commerciale)
**Licenza:** Proprietaria con contratto di servizio

```markdown
# NETGESCON PRO - CONTRATTO DI LICENZA COMMERCIALE

## SERVIZI INCLUSI
- 🔧 Supporto tecnico prioritario (email, telefono, teleassistenza)
- 🔄 Aggiornamenti automatici versioni PRO
- 💾 Backup automatico cloud
- 📊 Reportistica avanzata e analytics
- 🤖 Funzionalità AI e automazioni
- 📱 App mobile native iOS/Android
- 🔐 Sicurezza avanzata e conformità GDPR
- 📞 Consulenza normativa condominiale

## COSTI ANNUALI (Esempi)
- BASIC PRO: €99/anno (1-3 stabili)
- STANDARD PRO: €199/anno (4-10 stabili)  
- ENTERPRISE PRO: €399/anno (illimitati + white-label)

## GARANZIE E SLA
- 99.5% uptime garantito
- Risposta support < 24h
- Backup giornalieri certificati
- Conformità normative aggiornate
```

## 🏗️ STRUTTURA REPOSITORY

### Repository Separati
```
netgescon/
├── netgescon-community/          # Open Source
│   ├── LICENSE                   # Licenza custom OS
│   ├── README.md                 # Installazione community
│   ├── app/                      # Codice base
│   ├── resources/                # UI base
│   └── docs/                     # Documentazione
│
├── netgescon-pro/                # Privato
│   ├── LICENSE-COMMERCIAL        # Licenza commerciale
│   ├── app/Pro/                  # Funzionalità PRO
│   ├── resources/pro/            # UI avanzate
│   └── services/                 # Servizi cloud
│
└── netgescon-database/           # Privato
    ├── LICENSE-PROPRIETARY       # Database proprietario
    ├── migrations/pro/           # Migrazioni PRO
    ├── seeds/premium/            # Dati premium
    └── normative/                # Database normative
```

### Gestione Codice Ibrido
```php
// In Community Edition
if (LicenseManager::isPro()) {
    // Carica funzionalità PRO se disponibili
    ProFeatures::load();
} else {
    // Mostra upgrade notice
    View::share('showProUpgrade', true);
}

// Feature gating example
class ReportController extends Controller 
{
    public function advancedAnalytics() 
    {
        if (!LicenseManager::hasFeature('advanced_analytics')) {
            return redirect()->route('upgrade.pro')
                           ->with('feature', 'Analytics Avanzate disponibili solo in PRO');
        }
        
        return view('reports.advanced');
    }
}
```

## 🔐 PROTEZIONE ANTI-PIRATERIA

### 1. License Key System (PRO)
```php
class LicenseValidator 
{
    public function validatePRO($licenseKey, $domain) 
    {
        // 1. Verifica formato chiave
        if (!$this->isValidKeyFormat($licenseKey)) {
            return false;
        }
        
        // 2. Call home validation
        $response = Http::post('https://license.netgescon.it/validate', [
            'key' => $licenseKey,
            'domain' => $domain,
            'version' => config('app.version'),
            'fingerprint' => $this->getServerFingerprint()
        ]);
        
        // 3. Cache risultato per 24h
        Cache::put("license_valid_{$domain}", $response->json(), 86400);
        
        return $response->successful() && $response->json('valid');
    }
    
    private function getServerFingerprint() 
    {
        // Unique server identifier
        return hash('sha256', 
            php_uname() . 
            $_SERVER['SERVER_ADDR'] . 
            $_SERVER['HTTP_HOST']
        );
    }
}
```

### 2. Code Obfuscation (PRO Features)
```bash
# Build process per versione PRO
composer require --dev "jakub-onderka/php-obfuscator"

# Offusca solo features PRO
php-obfuscator app/Pro/ --output app/Pro/obfuscated/
```

### 3. Database Watermarking
```sql
-- Ogni installazione PRO ha watermark univoco
CREATE TABLE license_info (
    installation_id VARCHAR(64) PRIMARY KEY,
    license_key VARCHAR(128),
    licensed_to VARCHAR(255),
    installation_date TIMESTAMP,
    last_validation TIMESTAMP,
    server_fingerprint VARCHAR(64)
);

-- Watermark nascosto in tabelle sistema
INSERT INTO system_settings VALUES ('_wm', 'encoded_license_info_hidden');
```

## 📊 COMPLIANCE E TRACCIAMENTO

### Usage Analytics (Anonimizzate)
```php
class UsageTracker 
{
    public function trackFeatureUsage($feature, $anonymizedData = []) 
    {
        // Solo se consenso utente
        if (!setting('analytics_consent', false)) {
            return;
        }
        
        Http::post('https://analytics.netgescon.it/track', [
            'installation_id' => config('app.installation_id'),
            'version' => config('app.version'),
            'feature' => $feature,
            'timestamp' => now(),
            'data' => $anonymizedData, // NO dati sensibili
            'license_type' => LicenseManager::getType() // community|pro
        ]);
    }
}

// Usage examples
UsageTracker::track('stabili.created', ['count' => 1]);
UsageTracker::track('reports.generated', ['type' => 'bilancio']);
UsageTracker::track('users.login', ['role' => 'admin']);
```

### Violation Detection
```php
class LicenseViolationDetector 
{
    public function checkForViolations() 
    {
        $violations = [];
        
        // 1. Check commercial usage patterns
        if ($this->detectCommercialUsage()) {
            $violations[] = 'commercial_usage_detected';
        }
        
        // 2. Check code modifications
        if ($this->detectUnauthorizedModifications()) {
            $violations[] = 'code_tampering_detected';
        }
        
        // 3. Check license file integrity
        if ($this->detectLicenseRemoval()) {
            $violations[] = 'license_removal_detected';
        }
        
        if (!empty($violations)) {
            $this->reportViolations($violations);
        }
    }
    
    private function detectCommercialUsage() 
    {
        // Euristics per rilevare uso commerciale:
        // - Troppi stabili per singolo admin
        // - Pattern di accesso da multiple IPs
        // - Hosting provider patterns
        // - Domain commerciali
        
        $stabiliCount = Stabile::count();
        $adminCount = User::where('role', 'admin')->count();
        
        return ($stabiliCount / $adminCount) > 20; // Soglia sospetta
    }
}
```

## 📋 DOCUMENTAZIONE LEGALE

### 1. Terms of Service
```markdown
# TERMINI DI SERVIZIO NETGESCON

## 1. ACCETTAZIONE TERMINI
Utilizzando NetGesCon accetti integralmente questi termini.

## 2. LICENZA D'USO
- Software fornito sotto licenza Open Source personalizzata
- Uso commerciale limitato come da licenza
- Richiesta autorizzazione per servizi commerciali

## 3. PRIVACY E DATI
- I tuoi dati rimangono sui tuoi server
- Analytics anonimizzate solo con consenso
- Conformità GDPR garantita

## 4. LIMITAZIONI DI RESPONSABILITÀ
- Software fornito "as-is"
- Nessuna garanzia di funzionamento
- Responsabilità limitata a quanto pagato

## 5. AGGIORNAMENTI E MODIFICHE
- Aggiornamenti automatici per versione PRO
- Possibili modifiche ai termini con preavviso
- Continuazione uso implica accettazione
```

### 2. Privacy Policy
```markdown
# INFORMATIVA PRIVACY NETGESCON

## DATI RACCOLTI
### Community Edition
- Nessun dato personale raccolto
- Analytics anonimizzate solo con consenso
- Log tecnici locali per debug

### PRO Edition  
- Email per supporto e fatturazione
- Dati di licenza per validazione
- Backup automatici se autorizzati

## BASE GIURIDICA
- Consenso esplicito per analytics
- Interesse legittimo per supporto tecnico
- Obbligo contrattuale per servizi PRO

## DIRITTI UTENTE
- Accesso ai propri dati
- Rettifica dati incorretti
- Cancellazione account PRO
- Portabilità dati in formato standard
```

## 🚀 IMPLEMENTATION ROADMAP

### Fase 1 - Setup Legale (Sprint 1)
- [ ] Definizione licenza custom finale
- [ ] Creazione Terms of Service e Privacy Policy
- [ ] Setup trademark "NetGesCon"
- [ ] Struttura repository community vs pro

### Fase 2 - Sistema Licenze (Sprint 2)
- [ ] LicenseManager class
- [ ] Feature gating per funzionalità PRO
- [ ] License validation API
- [ ] Analytics anonimizzate opt-in

### Fase 3 - Protezioni (Sprint 3)
- [ ] Code obfuscation per PRO features
- [ ] Anti-tampering detection
- [ ] Database watermarking
- [ ] Violation reporting

### Fase 4 - Commercializzazione (Sprint 4)
- [ ] Sito marketing netgescon.it
- [ ] Sistema pagamenti Stripe/PayPal
- [ ] Customer portal PRO
- [ ] Support ticketing system

## 💡 ALTERNATIVE LICENSES DA CONSIDERARE

### 1. AGPL v3 + Commercial Exception
**Vantaggi:**
- Copyleft forte: modifiche devono essere open
- Exception commerciale su misura
- Protezione anti-SaaS automatica

**Svantaggi:**
- Complessità legale alta
- Possibili incompatibilità con altri progetti

### 2. Business Source License (BSL)
**Vantaggi:**
- Open source dopo X anni
- Uso commerciale limitato per periodo
- Modello Elastic/MongoDB

**Svantaggi:**
- Non OSI-approved
- Complessità temporale

### 3. Fair Source License
**Vantaggi:**
- Codice visibile
- Uso limitato per numero utenti
- Modello GitLab

**Svantaggi:**
- Non truly open source
- Limitazioni artificiali

## 🎯 RACCOMANDAZIONE FINALE

**Proposta:** Licenza Custom Open Source basata su MIT/BSD con clausole commerciali specifiche.

**Benefici:**
- ✅ Massima libertà per utenti finali
- ✅ Protezione contro commercializzazione abusiva  
- ✅ Flessibilità per partnership future
- ✅ Compliance con ecosistema open source
- ✅ Possibilità dual-license semplice

---

**Data Analisi:** 14/07/2025  
**Stato:** PROPOSTA - Da approvare  
**Prossimo Step:** Revisione legale + finalizzazione testi
