Chiamate di sistema e app supportate in macOS! #1

Dopo aver visto framework e librerie, passiamo ad un nuovo argomento: vediamo cosa sono le chiamate di sistema (syscall), quali app sono supportare in macOS e cos’è lo standard POSIX.

chiamate di sistema

Applicazioni supportate

Ricollegandoci per un attimo al discorso sulla struttura delle app realizzato poco tempo fa, oltre ai bundle, macOS supporta anche diversi altri tipi di applicazioni.

In particolare, sono accettati applicativi:

  • Java: macOS include una Java Virtual Machine (JVM) e proprio come gli altri sistemi, le applicazioni in Java sono fornite come file con estensione .class. Il formato di file .class non è ovviamente nativo per macOS, il che significa che ne è necessario utilizzare la java command-line per eseguire i programmi; l’implementazione della JVM, tuttavia, è gestita da Apple. Le utilità fornite dalla riga di comando fanno parte del JavaVM.framework, che è pubblico. Altri due framework invece, JavaEmbedding.framework e JavaFrameEmbedding.framework, sono usati per collegare e incorporare Java all’interno di Objective C. Per quanto riguarda iOS, Java non è supportato.
  • Widgets: sono presenti nella dashboard di macOS (avevamo discusso dell’effettiva utilità della dashboard qui) sono mini pagine HTML/Javascript, infatti sono molto facili da programmare.
    I widget sono memorizzati in /Librery/Widget, come pacchetti con l’estensione .wdg e, ciascuno di questi bundle contiene:
    1) Un file HTML (widgetname.html) è l’interfaccia utente del widget, composto da due elementi <div>, che mostrano rispettivamente la parte anteriore e posteriore del widget.
    2) Un file Javascript (widgetname.js) che è il “motore” del Widget e fornisce la sua interattività
    3) Un file CSS  (widgetname.css), che fornisce stili, caratteri ed altri elementi grafici.
    4) La directory delle lingue, contenente stringhe localizzate nelle diverse lingue.
    5) Immagini, solitamente memorizzati in una sottodirectory Images/
    6) Un plugin binario, richiesto quando il widget non può essere completamente implementato in Javascript.
  • BSD/Mach Native: sebbene i linguaggi supportati di default siano Objective C e Swift, le applicazioni native possono essere codificate in C/C ++ e possono “scegliere” di rinunciare ad alcuni framework, lavorando direttamente con le librerie di sistema e le interfacce di basso livello di BSD e Mach. Questa modalità, consente un porting relativamente di codice di open source. Inoltre, iniziative come MacPorts hanno fatto il passo più lungo, andando a collezionare e compilare queste app, in pacchetti simili ai famosi modelli RPM/APT/DEB di Linux, per un’installazione binaria rapida.
    La conformità POSIX di macOS semplifica il porting delle applicazioni, facendo affidamento sulle chiamate di sistema standard e sulle librerie precedentemente discusse.Esiste, tuttavia, un altro sottoinsieme di API: Mach Traps, specifiche in macOS e consistenti con quelle di BSD.

Le syscall

Come in tutti i sistemi operativi, i programmi in userspace non sono in grado di accedere direttamente alle risorse di sistema: possono manipolare i registri generici ed eseguire calcoli semplici, ma per ottenere funzionalità significative, come l’apertura di un file o di un socket o anche l’emissione di un semplice messaggio, devono utilizzare le chiamate di sistema. Si tratta di punti di ingresso in funzioni predefinite che il kernel esporta e sono accessibili in usermode tramite link a /usr/lib/libSystem.B.dylib. Le chiamate di sistema in macOS sono insolite in quanto il sistema esporta in realtà due ‘tipi’ di syscall, quella di Mach e quella di POSIX, che analizzeremo più nel dettaglio nel prossimo articolo!

Anche per questo articolo è tutto! Per eventuali domande, curiosità o feedback potete lasciare un commento qui in basso, a presto!

HotAcquista iPhone 15 su Amazon!
Approfondimenti