Il motivo per farlo è risolvere il caso in cui una nuova API non è più retrocompatibile con un'API precedente.
Per spiegare, basta dire che esiste una vecchia API v1.0. Il creatore di questa API decide che è rotto e funziona su una nuova API v1.1 che interrompe intenzionalmente la compatibilità con la vecchia API v1.0. Ora, qualsiasi programma scritto contro la vecchia API non può essere ricompilato così com'è con la nuova API.
Quindi diciamo che c'è una grande app scritta contro la vecchia API e lo sviluppatore non ha accesso al codice sorgente. Una soluzione sarebbe quella di ri-implementare una vecchia API "personalizzata" v1.0 in termini di nuove chiamate API v1.1. Quindi l'API v1.0 "personalizzata" sta mantenendo la stessa interfaccia / metodi dell'API v1.0 ma all'interno della sua implementazione sta effettivamente effettuando chiamate ai nuovi metodi API v1.1.
Quindi l'app di grandi dimensioni può essere compilata e collegata con l'API v1.0 "personalizzata" e la nuova API v1.1 senza modifiche importanti al codice sorgente.
Esiste un termine per questa pratica?
C'è un recente esempio di ciò che accade in Porta di XScreenSaver di Jamie Zawinski per iPhone - ha implementato nuovamente l'API di OpenGL 1.3 in termini di API OpenGL ES 1.1. In questo caso, OpenGL 1.3 rappresenta la "vecchia" API e OpenGL ES 1.1 rappresenta la "nuova" API.