# Portage (software)

Portage è il sistema di gestione dei pacchetti di Gentoo Linux. È rilasciato sotto licenza GPLv2, la sua caratteristica principale è l'installazione delle applicazioni a partire dalla compilazione del loro codice sorgente. Poiché le possibili combinazioni di opzioni di compilazione e flag USE (v. oltre) permettono di costruire una distribuzione Linux personalizzata, Portage è detto meta-distribution engine e Gentoo una "metadistribuzione".
Portage è costituito da un nucleo scritto in Python che lavora su script bash detti Ebuild. L'interfaccia a riga di comando per Portage è il comando emerge, usato principalmente per installare ed aggiornare le applicazioni.

## Caratteristiche

Poiché un sistema Gentoo può infatti essere costruito compilando le varie componenti, partendo da una base costituita da un compilatore e un ambiente minimale, Portage scarica il codice sorgente da Internet e costruisce via via il sistema di base e successivamente le applicazioni desiderate. In ogni caso, Portage permette l'uso di pacchetti binari, utili in caso di macchine lente o in ambienti di lavoro in cui la velocità di installazione sia un fattore critico.
Esso è chiaramente ispirato al tradizionale sistema dei ports presente in BSD: entrambi compilano i pacchetti da sorgente e permettono di installare e disinstallare il software in sicurezza gestendo automaticamente le dipendenze. Rispetto a questo Portage è senz'altro più automatico e facile da usare, ma (e questa è una delle principali critiche che gli vengono rivolte dagli stessi utenti gentoo) ha gravi problemi ad installare i programmi in directory diverse da quelle prefissate; è ad esempio pratica comune che un utente voglia installare un programma nella propria home directory, e mentre ciò è abbastanza semplice in ports, è un'operazione alquanto complicata usando solo Portage.

### CFLAGS

Portage permette di impostare le CFLAGS da utilizzare durante la compilazione, in modo da adattare gli eseguibili prodotti a seconda delle proprie esigenze.

### Flag USE

Il sistema Portage offre la possibilità di usare le flag USE, che permettono all'utente di indicare quale caratteristica di un certo software si vuole includere durante la compilazione. Ad esempio, esiste una flag USE per includere, ove disponibile, il supporto DVD in tutti i pacchetti compilati dopo l'inserimento di tale flag. Le flag USE possono influire sulla risoluzione delle dipendenze: specificare il supporto PNG a un programma di grafica comporterà l'installazione delle relative librerie. L'impostazione delle flag USE è la via più comune su Gentoo per la configurazione di programmi.
Ad esempio, Mozilla Thunderbird 1.5 permette l'impostazione delle seguenti flag USE:
due delle quali permettono l'intergrazione in GNOME e il supporto al protocollo IPv6.

### Gestione dei pacchetti instabili

Ebuilds progettati per architetture specifiche o pacchetti in stato sperimentale sono generalmente "mascherati" (masked in gergo) in modo tale che non sia permesso di installarli senza decisione esplicita dell'utente. Esistono tipi diversi di mascheramento, in relazione al rischio che comporta la loro installazione:
* mascheramento con parole chiave (keywords):
    pacchetti ancora in fase di test, ma che a breve potrebbero essere dichiarati stabili marcati con la dicitura ~arch. Ad esempio un ebuild può essere contrassegnato con la dicitura "~amd64 ~ppc -sparc x86" a indicare che è considerato stabile solo per l'architettura x86 e non è mai stato provato su sparc.
* pacchetti hard masked:
    sono pacchetti che, per vari motivi, vengono considerati pericolosi per la stabilità del sistema. Solitamente è software con gravi bug o falle di sicurezza.

## Architetture e sistemi operativi supportati

Portage è parte di Gentoo, quindi funziona sulle stesse architetture: DEC Alpha, AMD64, ARM, hppa, IA64, MIPS, PowerPC, PowerPC64, s390, sh, SPARC, x86.
Inoltre è in grado di funzionare in via sperimentale sui sistemi operativi macOS e FreeBSD.