Sono piuttosto parziale a  Riepilogo di Wikipedia  personalmente: 
  A legacy system is an old method, technology, computer system, or application program that continues to be used, typically because it still functions for the users' needs, even though newer technology or more efficient methods of performing a task are now available.
 Molto di ciò che gli altri stanno descrivendo nelle loro risposte sono  ragioni  perché il codice diventa "legacy". Ma la domanda essenziale in sé è questa: 
  But it's still used in the production systems - so is it really legacy? And what makes it legacy?
 Il fatto che sia ancora utilizzato nella produzione  è precisamente ciò che lo rende legacy . Se il codice non funziona correttamente o non è più utilizzato in produzione, allora quel codice è "rotto" o "ritirato", rispettivamente.  Legacy  significa che è ancora in uso e funziona bene, ma incorpora disegni o tecniche che non sono più di uso comune. 
 Qualsiasi codice o sistema che (a) vorresti aggiornare / aggiornare, ma non può, o (b) sono ancora nel mezzo dell'aggiornamento, è un sistema legacy. Questo non significa  refactoring  o pulizia generale del codice, significa  significative  modifiche al design, possibilmente utilizzando un nuovo framework o anche una nuova piattaforma. 
 Ci sono diversi motivi per cui i sistemi o il codice potrebbero  diventare  legacy: 
-   Mancanza di manutenzione regolare o  decomposizione del software . Chiaramente se l'applicazione non viene mantenuta regolarmente, non manterrà il passo con i principali cambiamenti nel mondo del software. Ciò potrebbe essere dovuto alla semplice negligenza o potrebbe essere una scelta deliberata basata su priorità di business o vincoli di budget.  
-   Mancanza di test.  Un'altra risposta  fa riferimento alla rivendicazione iperbolica di un autore popolare di qualsiasi codice non coperto da prova essere un codice legacy. Questa non è una definizione precisa ma  è  una possibile causa principale; senza buoni test (automatici o manuali), gli sviluppatori diventano timidi e hanno paura di apportare modifiche importanti perché si preoccupano di rompere qualcosa, portando così il "software putrefazione" sopra.  
-   Rev-locking, un fattore spesso trascurato che è particolarmente insidioso nei progetti che utilizzano librerie o framework open-source di grandi dimensioni (anche se l'ho visto accadere anche con strumenti commerciali). Spesso ci sarà una grande personalizzazione fatta al framework / libreria, rendendo un aggiornamento proibitivamente difficile o costoso. Quindi il sistema diventa legacy perché gira su una piattaforma più vecchia (e probabilmente non più supportata).  
-   Il codice sorgente non è più disponibile, il che significa che il sistema può essere sempre aggiunto e mai modificato. Dal momento che questi sistemi devono essere riscritti per l'aggiornamento - al contrario di rivedere in modo incrementale / iterativo - molte aziende non si preoccuperanno.  
 Qualsiasi cosa che rallenta o interrompe gli aggiornamenti di un codice base può portare a quella base di codice diventare legacy. 
 Ora la domanda separata, non dichiarata ma implicita è,  cosa c'è di sbagliato nel codice legacy?  Viene spesso usata come termine peggiorativo, da qui la domanda: 
  Should we shy away from this unwarranted labelling of perfectly functioning code?
 E la risposta è no, non dovremmo; l'etichettatura  è  giustificata e il termine stesso implica chiaramente il codice di funzionamento. Il punto non è  che  è la sua funzione, ma  come  sta funzionando. 
 In alcuni casi non c'è niente di sbagliato nel codice legacy. Non è una parolaccia. Codice / sistemi legacy non sono malvagi. Hanno appena raccolto un po 'di polvere - a volte un po', a volte molto. 
  Legacy  diventa  obsoleto  quando il sistema non può più servire (tutte) le esigenze del cliente.  Quella etichetta  è quella di cui dobbiamo fare attenzione. Altrimenti, è semplicemente un'equazione costi / benefici; se il costo dell'aggiornamento sarebbe inferiore al costo dei suoi benefici (compresi i costi di manutenzione futuri inferiori), aggiornare, altrimenti, lasciarlo da solo. Non c'è bisogno di sputare la parola "legacy" nello stesso tono che normalmente si riserva per "audit fiscale". È una situazione perfettamente OK.