Sia il kernel di Linux che quello di macOS sono basati su UNIX. Alcuni dicono che macOS è “linux”, altri dicono che entrambi sono compatibili a causa delle somiglianze tra i comandi e la gerarchia del file system.

Oggi voglio mostrare un po’ di entrambi, mostrando le differenze e le somiglianze tra il kernel Linux & kernel Mac come ho menzionato nei precedenti articoli sul kernel Linux.

Tabella dei contenuti

Kernel di macOS

Nel 1985, Steve Jobs lasciò Apple a causa di un disaccordo con il CEO John Sculley e il consiglio di amministrazione di Apple. Ha quindi fondato una nuova società di computer chiamata NeXT. Jobs voleva che un nuovo computer (con un nuovo sistema operativo) fosse rilasciato rapidamente. Per risparmiare tempo, il team di NeXT usò il kernel Carnegie Mellon Mach e parti del codice base BSD per creare il sistema operativo NeXTSTEP.

Sistema operativo desktop NeXTSTEP

NeXT non è mai diventato un successo finanziario, in parte dovuto all’abitudine di Jobs di spendere soldi come se fosse ancora alla Apple. Nel frattempo, Apple ha cercato senza successo di aggiornare il suo sistema operativo in diverse occasioni, anche collaborando con IBM. Nel 1997, Apple comprò NeXT per 429 milioni di dollari. Come parte dell’accordo, Steve Jobs tornò alla Apple e NeXTSTEP divenne la base di macOS e iOS.

Kernel Linux

A differenza del kernel di macOS, Linux non fu creato come parte di un’impresa commerciale. Invece, è stato creato nel 1991 dallo studente di informatica Linus Torvalds. Originariamente, il kernel fu scritto secondo le specifiche del computer di Linus perché voleva trarre vantaggio dal suo nuovo processore 80386.

Linus pubblicò il codice del suo nuovo kernel sul web nell’agosto 1991. Presto, stava ricevendo suggerimenti di codice e risorse in tutto il mondo. L’anno seguente, Orest Zborowski fece il porting del sistema X Windows su Linux, dandogli la capacità di supportare un’interfaccia utente grafica.

Risorse del kernel MacOS

Il kernel macOS è ufficialmente conosciuto come XNU. L’acronimo sta per “XNU is Not Unix”. Secondo la pagina ufficiale di Apple su Github, XNU è “un kernel ibrido che combina il kernel Mach sviluppato alla Carnegie Mellon University con FreeBSD e componenti C++ per i driver.”

La parte del sottosistema BSD del codice è “normalmente implementata come server userspace in sistemi microkernel”. La parte Mach è responsabile del lavoro di basso livello come il multitasking, la memoria protetta, la gestione della memoria virtuale, il supporto al debug del kernel e l’I/O della console.

risorse del kernel MacOS

Mappa di MacOS: il cuore di tutto si chiama Darwin; e al suo interno, abbiamo utility di sistema separate e il kernel XNU, che è composto in parti dal kernel Mach e dal kernel BSD.

A differenza di Linux, questo kernel è diviso in quello che chiamano kernel ibrido, permettendo ad una parte di esso di fermarsi per la manutenzione, mentre un’altra continua a lavorare. In diversi dibattiti questo ha anche aperto la questione del fatto che un kernel ibrido è più stabile; se una delle sue parti si ferma, l’altra può ricominciare.

Risorse del kernel Linux

Mentre il kernel macOS combina le capacità di un microkernel con Mach e un kernel monolitico come BSD, Linux è solo un kernel monolitico. Un kernel monolitico è responsabile della gestione della CPU, della memoria, della comunicazione tra processi, dei driver di periferica, del file system e delle chiamate di servizio al sistema. Cioè, fa tutto senza suddivisioni.

Ovviamente, questo ha già suscitato molte discussioni anche con Linus stesso e altri sviluppatori, che sostengono che un kernel monolitico è più suscettibile di errori oltre ad essere più lento; ma Linux è il contrario di questo ogni anno, e può essere ottimizzato come un kernel ibrido. Inoltre, con l’aiuto di RedHat, il kernel ora include una Live Patch che permette la manutenzione in tempo reale senza necessità di riavvio.

Differenze tra il kernel di MacOS (XNU) e Linux

  1. Il kernel di macOS (XNU) esiste da più tempo di Linux ed era basato su una combinazione di due codebase ancora più vecchie. Questo pesa a favore, per la stabilità e la storia.
  2. D’altra parte, Linux è più nuovo, scritto da zero e utilizzato su molti altri dispositivi; tanto che è presente in tutti i 500 migliori tra i migliori supercomputer e nel supercomputer nordamericano recentemente inaugurato.

Nell’ambito del sistema, non abbiamo un gestore di pacchetti tramite la riga di comando nel terminale di macOS.

L’installazione dei pacchetti in formato .pkg – come BSD – avviene tramite questa riga di comando, se non attraverso la GUI:

$ sudo installer -pkg /path/to/package.pkg -target /

NOTA: MacOS .pkg è totalmente diverso da BSD .pkg!

Non pensate che macOS supporti i programmi BSD e viceversa. Non supporta e non installa. Puoi avere un comando equivalente ad apt in macOS, sotto 2 opzioni:

Installazione di Homebrew o MacPorts. Alla fine, avrete la seguente sintassi:$ brew install PACKAGE

$ port install PACKAGE

Ricordate che non tutti i programmi/pacchetti disponibili per Linux o BSD saranno in MacOS Ports.

Compatibilità

In termini di compatibilità, non c’è molto da dire; il nucleo Darwin e il kernel Linux sono distinti come il confronto tra il kernel di Windows NT e quello BSD. I driver scritti per Linux non funzionano su macOS e viceversa. Devono essere compilati prima; curiosamente, Linux ha una serie di demoni per macOS, tra cui il server di stampa CUPS!

Quello che abbiamo in comune la compatibilità sono, infatti, strumenti terminali come i pacchetti GNU Utils o Busybox, quindi non abbiamo solo BASH ma anche gcc, rm, dd, top, nano, vim, ecc. E questo è intrinseco a tutte le applicazioni basate su UNIX. Inoltre, abbiamo l’architettura delle cartelle del filesystem, cartelle comuni a root in /, / lib, / var, / etc, / dev, e così via.

Conclusione

macOS e Linux hanno le loro similitudini e differenze, proprio come BSD rispetto a Linux. Ma poiché sono basati su UNIX, condividono modelli che li rendono familiari all’ambiente. Coloro che usano Linux e migrano verso macOS o viceversa avranno familiarità con una serie di comandi e caratteristiche.

La differenza più evidente sarebbe l’interfaccia grafica, il cui problema sarebbe una questione di adattamento personale.


L’hosting di LinuxAndUbuntu è sponsorizzato da massiveGRID