Perché Linux si adatta così bene a piattaforme hardware diverse?


22

Perché Linux funziona bene su così tanti diversi tipi di macchine: desktop, laptop, server, dispositivi integrati, telefoni cellulari, ecc.? È principalmente perché il sistema è aperto, quindi qualsiasi parte di esso può essere modificata per funzionare in ambienti diversi? Oppure ci sono altre proprietà del kernel e / o del sistema Linux che semplificano il funzionamento di questo sistema operativo su una così vasta gamma di piattaforme?


7
Penso che tu abbia già una parte della risposta: l'apertura rende facile per diversi gruppi di persone o aziende adattarla alle loro esigenze. Dato che il kernel è stato particolarmente criticato per essere monolitico, non sono sicuro che il suo progetto iniziale sia stato deliberatamente ottimizzato per la scalabilità in alcun modo. Immagino che un numero maggiore di persone abbia lavorato sul core di Linux che su altri sistemi operativi - e forse questo ha costretto i manutentori del core a prendersi cura di dividere il codice in parti con interfacce chiare? D'altra parte alcune varianti di BSD hanno la portabilità come obiettivo esplicito.
RedGrittyBrick,

@Rosso: è stato criticato per essere un kernel monolitico invece di un micro kernel, anche se non ha nulla a che fare con il suo design. Ha a che fare con quanta parte del kernel gira nello spazio utente e quanto gira nello spazio kernel. Il kernel di Windows NT (ad esempio) è molto modulare, ma è ancora tecnicamente monolitico perché la maggior parte dei servizi (cioè il filesystem) viene eseguita in modalità kernel anziché in modalità utente.
Billy ONeal,

@Billy: Windows NT è tecnicamente un kernel ibrido . Credo che Microsoft mantenga ancora i sottosistemi utilizzando il passaggio dei messaggi e mantenga la possibilità di spostare i pezzi nello spazio utente come desiderato. Lo hanno fatto con il sistema grafico in Vista: ora è nello spazio utente dopo essere stato nello spazio kernel dal NT 4.0
Zan Lynx,

2
@Zan: avevo l'impressione che lo stato di "kernel ibrido" fosse contestato . Pertanto ho detto "monolitico". NT ha certamente molte caratteristiche monolitiche anche se è divisa in pezzi di stile bibliotecario.
Billy ONeal,

@Billy: Mi sembra che se il tuo kernel può essere trasformato in un micro-kernel semplicemente cambiando alcune opzioni e ricostruendo, allora è qualcosa di diverso dal monolitico anche se le build binarie più utilizzate mettono tutto nello spazio degli indirizzi del kernel.
Zan Lynx,

Risposte:


31

Mentre l'apertura è sicuramente parte di esso, penso che il fattore chiave sia la continua insistenza di Linus Torvald sul fatto che tutto il lavoro, da grande a piccolo, ha un posto nel kernel principale di Linux, purché sia ​​ben fatto. Se ad un certo punto avesse deciso di tracciare una linea e dire "okay, per quel fantastico hardware supercomputer, abbiamo bisogno di un fork", allora potrebbero essersi sviluppate varianti di fascia alta e di sistema completamente separate. Così com'è, invece le persone hanno fatto il lavoro più duro per far suonare tutto relativamente bene insieme.

Inoltre, i kludges che consentono a un lato delle cose a scapito dell'altro non sono, in genere, ammessi - ancora una volta, costringendo le persone a risolvere i problemi in un modo più duro ma più corretto, che di solito risulta più facile andare avanti una volta qualunque cosa fosse richiesta, il Kludge diventa una nota storica.

Da un'intervista di diversi anni fa :

D: Linux è un sistema versatile. Fornisce PC, enormi server, cellulari e una decina di altri dispositivi. Dalla tua posizione privilegiata, quale settore sarà quello in cui Linux esprimerà il massimo potenziale?

A: Penso che il vero potere di Linux sia esattamente che non si tratta di una nicchia. Tutti possono giocare insieme e persone diverse e aziende diverse hanno motivazioni e credenze totalmente diverse in ciò che è importante per loro. Quindi non sono nemmeno interessato a nessun settore in particolare.


18
E il piccolo sistema e le enormi definizioni di sistema continuano a spostarsi continuamente, quindi sono stati evitati buoni kludges. Gli smartphone multicore ora possono beneficiare di tutto il lavoro di supercomputer svolto anni fa.
Zan Lynx,

4

Linux si adatta a molti diversi tipi di hardware perché:

  • è molto configurabile
  • il sorgente è disponibile gratuitamente e può essere creato per qualsiasi CPU che abbia un compilatore C.
  • i processori nei dispositivi embedded e nei telefoni cellulari hanno almeno lo stesso livello o più potenza rispetto alle macchine 386 originali su cui è stato effettuato lo sviluppo iniziale di Linux e continuano a guadagnare energia
  • funziona perfettamente con nient'altro che una rete, una qualche forma di disco o dispositivo simile a un disco e una porta seriale

Bene, qualcuno dovrebbe scrivere una quantità minima di codice bootstrap e C runtime per la piattaforma di destinazione. Oh, e deve supportare la memoria virtuale. Ma per il resto vero :)
Billy ONeal,

1
@Billy Ci sono porte per i sistemi nommu: uClinux, uClinux / ARM e MontaVista Linux.
Tobu,

@Tobu: Hmm .. Non capisco come possa essere. L'intera "filosofia Unix" per più processi ha il presupposto che qualcosa di simile forkè possibile e forknon può essere fatto in modo ragionevolmente efficiente su un sistema di memoria non virtuale. Mentre le porte indicate probabilmente utilizzano parti del kernel Linux e possono eseguire alcuni software Linux, per la maggior parte sembra che le API esposte da queste porte siano diverse dai kernel Linux tipici. (Esempio: mappatura della memoria - che ovviamente richiede memoria virtuale)
Billy ONeal

linuxjournal.com/article/7814 : dice che uCLinux non supporta fork (), ma una variante di blocco chiamata vfork (), le applicazioni sotto uCLinux devono essere riscritte per usare vfork o thread.
LawrenceC

4

Il kernel Linux si adatta bene perché è quello che è. Il kernel principale è relativamente piccolo e fa quello che deve fare. I driver di dispositivo sono opzionali e possono essere esclusi dal kernel per sistemi più piccoli. Oltre ai requisiti minimi del kernel, la maggior parte delle funzionalità è implementata come funzionalità opzionale.

Dai un'occhiata al file di configurazione installato accanto alla maggior parte dei kernel. Elencherà tutte le funzionalità attivate e i driver supportati.

I driver sono supportati incorporati nel kernel o come moduli caricabili. Ciò consente a un kernel di essere configurato dinamicamente sull'hardware su cui è in esecuzione. Questo è l'approccio utilizzato da molte distribuzioni.

Oltre ad avere gli strumenti di compilazione, modificare il kernel per il nuovo hardware è relativamente semplice. Per un nuovo processore è necessario implementare solo il codice correlato come modifiche alla funzionalità esistente. I nuovi dispositivi richiedono solo un nuovo driver con i relativi hook. Anche i nuovi file system sono modifiche relativamente banali.

La base di codice è stata ben mantenuta per mantenere questa flessibilità senza fork esterno. La compilazione condizionale guida un kernel molto flessibile che è stato mantenuto il più minimale possibile.


1

Mi manca la competenza tecnica dettagliata per eseguire il backup di questa risposta, ma la mia esperienza suggerisce che Linux si ridimensiona bene rispetto ad altri sistemi operativi che utilizzo frequentemente (principalmente Windows). Quindi forse la domanda è perché Windows non si ridimensiona come Linux.

Se riaffermare la domanda in questo modo ti fosse ancora utile, suggerirei che le forze di mercato motivano Microsoft ad aggiungere caratteristiche e funzionalità adattate all'hardware più recente e più capace, perché vendono più copie del sistema operativo principalmente quando gli utenti finali acquistano nuovi sistemi . Quindi, in qualsiasi momento, trovo che l'ultima versione di Windows funzioni male su hardware meno recente e meno capace.

Perdonami se questo semplifica troppo la tua domanda.


Sembra che tu stia parlando del sistema operativo, mentre il ragazzo sta parlando del kernel. Bene, a meno che tu non sappia per certo se il kernel di Windows è gonfio.
Tshepang,

@Tshepang: Per essere onesti, le domande sul "kernel e / o sistema Linux". Windows 7 e Windows Phone 7 condividono un kernel? Il piccolo che ho letto suggerisce che i loro kernel potrebbero avere meno codice in comune rispetto ai kernel di Ubuntu Server e Android.
RedGrittyBrick,

Grazie, ma la domanda riguardava davvero Linux e non altri sistemi operativi. Ce ne sono molti altri là fuori: en.wikipedia.org/wiki/List_of_operating_systems
Justin Ethier,

Il kernel NT è in realtà molto efficiente, ma è il vasto numero di strati che lo circondano che rendono
LawrenceC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.