MacOS 15 Sequoia è ufficialmente UNIX

Apple macOS 15 Sequoia è apparso a metà settembre ed è una versione ufficiale e conforme di UNIX™, ma potrebbe non significare esattamente ciò che pensate. Ad esempio, macOS non utilizza alcun codice sorgente AT&T: “Unix” ha smesso di significare questo nel lontano 1993, quando Novell ha acquistato UNIX da Bell Labs, come abbiamo discusso all’inizio dell’anno scorso quando abbiamo annunciato che Unix era morto.

Poco dopo l’uscita di Sequoia, sono emerse notizie riguardanti alcuni break del software di sicurezza seguiti dal primo aggiornamento, versione 15.0.1, all’inizio di questo mese. L’arrivo della versione 15.0.1 è stato seguito da un paio di altri eventi. Uno non è affatto molto significativo. Un giorno o giù di lì dopo, il MacBook Air del Reg FOSS desk ha iniziato a offrire l’aggiornamento.

L’altro è un po’ più significativo per il mondo in generale, anche se solo leggermente. Sequoia è apparso come la voce più recente nel registro dei prodotti certificati UNIX® dell’Open Group. In effetti, ha sia il primo che il secondo posto perché ci sono voci separate per la versione Apple Silicon e la versione x86-64. Non c’è un significato particolare nell’ordine, ma se Apple continua a pagare per la certificazione, a un certo punto la versione x86-64 uscirà dall’elenco quando Apple smetterà di supportare il suo kit basato su Intel.

Unix è solo un nome nuovo per POSIX

Non è una questione di codice. Non lo è da più di 30 anni, da quando Novell ha acquistato l’Unix originale da AT&T. In realtà, ciò che la certificazione UNIX™ significa ora è ciò che una volta veniva chiamato “compatibile con POSIX”, un’abbreviazione coniata da Richard Stallman, guarda caso.

POSIX è essenzialmente un set di specifiche e test di compatibilità, tra cui avere gli strumenti giusti presenti nelle posizioni giuste. Finché ci sono, un sistema operativo può superare il test, ed è così che sistemi come il sistema operativo mainframe z/OS di IBM sono nell’elenco. z/OS è un lontano discendente dell’MVS a 24 bit di IBM per il mainframe System/370 del 1974, che in fondo non è molto più simile a Unix di un Apple II che esegue ProDOS.

Lo standard POSIX si è evoluto nel corso degli anni e, cosa abbastanza interessante, Apple rivendica UNIX 03 solo dal 2002. Un singolo prodotto, IBM AIX 7, vanta la compatibilità con la versione 4 dello standard, denominata UNIX® V7, ovvero POSIX.1-2008.

Da allora, lo standard ha continuato a evolversi. La specifica della versione 4 è stata rivista l’ultima volta nel 2018 e c’è anche una versione del 2024. Nessuno sembra più farci caso, il che è abbastanza giusto. Il mondo si è allontanato da Unix proprietario e ora che tutti i sistemi operativi Unix-like significativi sono FOSS o freeware, puoi aggiungere qualsiasi bit mancante senza pagare.

Ad esempio, POSIX ha risolto le differenze tra vari strumenti di archiviazione aggiungendo un nuovo comando, chiamato pax, in grado di gestire tutti i formati principali. È un ibrido di tar e cpio e la maggior parte delle distribuzioni Linux non lo include perché gli strumenti esistenti possono gestire i file. L’assenza del comando pax significa che un sistema operativo non è conforme a POSIX-1.2001 o versione successiva, ma ormai a nessuno importa più.

Quindi cosa rende un sistema operativo simile a Unix?

Se non avete bisogno di usare nessuno dei codici sorgente originali AT&T e persino la manciata di aziende che continuano a pagare per la certificazione ufficiale Unix non si preoccupa di puntare alla conformità con le ultime versioni di POSIX, allora cosa rende un sistema operativo simile a Unix?

Da una prospettiva molto più ampia, ciò che costituisce un Unix è che sembra Unix, si comporta come Unix e puoi trasferire programmi scritti per Unix su di esso senza modifiche sostanziali.

Il nucleo di macOS è abbastanza simile da qualificarsi. Utilizza un kernel chiamato XNU (che, ironicamente, sta per “XNU is Not Unix”) e un user-land derivato principalmente dal codice BSD. XNU è basato sul kernel Mach [PDF]. In particolare, dopo che Apple ha acquistato NeXT, ha aggiornato i componenti Mach del kernel NeXTstep con la versione migliorata di DEC OSF/1 (in seguito commercializzata come Compaq Tru64). Dispone inoltre di un grande “server Unix” nel kernel derivato dal codice BSD, il che significa che il sistema operativo microkernel più famoso e di successo del settore non è affatto un vero microkernel.

Oltre a ciò, la “user-land” (la roba in modalità testo sotto la GUI, i vari comandi, le shell e così via) è per lo più open source e gran parte di essa proviene da BSD. Ad esempio, il kernel XNU è su GitHub, così come grandi porzioni di macOS e iOS. Sono i livelli della GUI, le parti visibili che la rendono carina, che sono proprietari; sono i bit scritti per lo più in Objective-C e più di recente in Swift.

Apple era solita rendere disponibile una versione per lo più autonoma di questi livelli inferiori del sistema operativo come progetto chiamato Darwin e c’erano diverse distribuzioni che cercavano di completarla usando bit di altri sistemi operativi FOSS, come OpenDarwin e PureDarwin. Per noi, uno dei progetti più interessanti è stato NextBSD, che ha fatto l’opposto. Ha mantenuto il kernel FreeBSD, ma lo ha modificato in modo da poter usare parte del codice di livello superiore di Apple, come launchd, il sistema init di nuova generazione di Apple. In altre parole, l’equivalente di Cupertino di systemd.

Apple annunciò che avrebbe acquisito NeXT Computer alla fine del 1996 e nell’ottobre 1997 pubblicò un’anteprima del suo sistema operativo di nuova generazione chiamato Rhapsody. Rhapsody era effettivamente NeXTstep 5. Nel 1999, divenne Mac OS X Server 1.0, ancora visibilmente simile a NeXTstep. Che si evolse in Mac OS X 1.0 nel 2000.

NeXTstep (la capitalizzazione cambiò un paio di volte) divenne OPENSTEP, che divenne Rhapsody, poi Mac OS X Server, Mac OS X e poi solo OS X con 10.8 Mountain Lion e, a partire da 10.12 Sierra, era semplicemente macOS. Ma è riconoscibilmente lo stesso sistema operativo di NeXTstep 0.8, come dimostrato da un giovane Steve Jobs nel 1988.

Bootnote: Quindi, tutto in C?

No, non deve nemmeno essere implementato in C. Serenity OS è implementato in C++ e Redox OS è scritto in Rust, ed entrambi sono molto simili a Unix. Per andare agli estremi, sia C++ che Rust sono linguaggi di parentesi graffe nella più ampia famiglia C, ma TUNIS, il Toronto University System, era un sistema operativo compatibile con Unix Seventh Edition implementato in Concurrent Euclid, una variante di Pascal.

 

Articolo originale su The Register

Aggiornamento dello standard POSIX 1003.1-2024 con nuovi tool e funzioni

Dopo sette anni di sviluppo, l’IEEE Computer Society e l’Open Group Consortium hanno adottato una nuova versione dello standard POSIX 1003.1-2024, che mira a garantire la portabilità tra sistemi operativi di tipo UNIX. Lo standard POSIX (Portable Operating System Interface) definisce le interfacce software tra sistemi operativi e programmi applicativi.

POSIX è diviso in quattro parti. Le definizioni di base sono un elenco delle convenzioni, definizioni e concetti utilizzati nello standard. L’interfaccia di sistema descrive le chiamate di sistema C con i file di intestazione associati. La terza parte contiene una definizione degli interpreti della riga di comando e dei programmi ausiliari, ovvero funzioni shell e programmi di utilità. Infine, una sezione fornisce spiegazioni sullo standard. Nel periodo di massimo splendore delle varianti commerciali Unix reciprocamente incompatibili, la conformità POSIX era un criterio importante nella scelta di un sistema operativo per un software desiderato. Poiché le attuali varianti Linux e BSD sono ampiamente compatibili con POSIX, lo standard che è stato ora pubblicato segue e standardizza molte delle aggiunte già implementate in queste.

I comitati hanno esteso l’area di elaborazione della shell con i due strumenti readlink per visualizzare il contenuto dei link simbolici e realpath per risolvere il nome del percorso di un file. Nuove anche per lo strumento find, le opzioni -print0 per l’output del nome del percorso con un byte nullo di terminazione e -iname per la ricerca senza distinzione tra maiuscole e minuscole. Con xargs, è ora inclusa anche la delimitazione degli argomenti tramite zero byte tramite l’opzione -0. Con read, il delimitatore può essere definito tramite -d, sed utilizza espressioni regolari estese tramite -E e set conosce l’opzione -o pipefail.

Per i programmi C, ora sono disponibili la costante SIGWINCH e strumenti per la creazione di oggetti condivisi. Sono state aggiunte anche alcune nuove funzioni:

  • tcgetwinsize (determina la dimensione della finestra del terminale)
  • gettext (organizzazione delle interfacce multilingue)
  • asprintf (formattazione di una stringa di caratteri e assegnazione di un buffer in base alla dimensione dell’output)
  • strlcpy e strlcat (analoghi a strncpy e strncat, che aggiungono un byte zero alla fine per proteggere dagli overflow del buffer)

La definizione per make ora contiene macro nidificate, consente di specificare più file nella direttiva include e include nuovi target come .NOTPARALLEL, .PHONY e .WAIT. La macro CURDIR punta alla directory corrente e con “::=”, “::=”, “+=”, “?=” e “!=” ci sono nuovi operatori di assegnazione per macro e variabili.

Il testo dello standard è attualmente disponibile solo come PDF sul sito Web IEEE per clienti paganti, istituti scolastici e utenti registrati con un account. Il testo dello standard sarà pubblicato sul sito web di Open Group “nel prossimo futuro”. Finora, solo l’edizione precedente di POSIX 1003.1-2017 è disponibile al pubblico qui.

Fonte: Heise Online

Partecipare agli standard UNIX

g041covL’Open Group ha diffuso su Twitter l’invito a partecipare allo sviluppo degli standard POSIX e Single UNIX Specification, diffondendo il link dell’Austin Common Standards Group.

Si tratta di un gruppo di lavoro tecnico congiunto, creato per occuparsi del mantenimento delle interfacce al core dei sistemi open, ossia gli standard POSIX 1003.1 (e il precedente 1003.2), l’ISO/IEC 9945 parti da 1 a 4, e il core della Single UNIX Specification Version 3.

L’approccio allo sviluppo delle specifiche è del tipo “scrivere una volta, adottare ovunque”. L’adesione al gruppo è gratuita e aperta alla partecipazione da parte di aziende commerciali, figure influenti della comunità open source, elementi di contatto con altri gruppi di sviluppo degli standard, utenti governativi e del mondo educativo, e gruppi di utenti.