Quello che ho davvero intendo dire è: è la libreria C considerata la stalla/documentata API Linux dalla politica, e l'API chiamata di sistema/ABI del kernel è considerato instabile (può cambiare) e, pertanto, non documentato di proposito o di bassa priorità?
E 'impossibile parlare di politica senza specificare cui politica, per quello.
Le persone che programmano per "Linux" in genere sono in realtà programmi per uno o più versioni di GNU/Linux, a differenza del kernel nuda. Sono quindi incline a dire che probabilmente non stiamo considerando la politica degli sviluppatori del kernel. In effetti, se l'interfaccia della libreria C è disponibile, allora non stiamo parlando di un kernel nullo. Inoltre, in base al tagging, suppongo che tu stia chiedendo della programmazione in C. Se stavi programmando in assembly, l'interfaccia raw di syscall sarebbe naturale e appropriata, e la maggior parte dei miei commenti non sarebbe applicabile.
Se si sta effettivamente indirizzando GNU/Linux all'esclusione di qualsiasi altra cosa, la domanda è in qualche modo ragionevole. D'altra parte, spesso si preferisce programmare per una maggiore compatibilità. In tal caso, non esiste alcuna alternativa all'utilizzo delle interfacce syscall della C-library, poiché le syscall di ogni sistema sono diverse. Le interfacce syscall di Glibc fanno un ottimo lavoro di conformità con POSIX e SUS, quindi usarle (correttamente) è un enorme vantaggio per la portabilità. Anche se altri sistemi Unix e Unix, come OS X, BSD, Solaris, ecc. Non sono obiettivi immediati, raramente è una perdita tenere aperta la possibilità di utilizzare il software su tali sistemi.
In ogni caso, se si fosse certi che il proprio software eseguisse direttamente le syscalls di Linux, si inserirà effettivamente l'assembly inline per farlo ovunque lo si desideri? Sicuramente no - scriveresti le funzioni wrapper.Perché, quindi, dovresti opporsi all'uso delle funzioni wrapper testate e ben documentate già fornite dalla libreria C?
Certamente l'interfaccia syscall di Linux cambia in una certa misura tra le versioni del kernel. Questo può essere considerato la cosa che rende versioni diverse (intendo x.2y
->x.2z
o x.y
->z.w
). Non sono ben sintonizzato su quanto siano in genere tali modifiche di grandi dimensioni, ma in passato sono state apportate modifiche incompatibili e l'utilizzo delle interfacce della libreria C consente di isolare da tali modifiche in una certa misura. Come descritto sopra, tuttavia, penso che ci siano altri motivi più ampi per preferire l'interfaccia della libreria C.
re: _historical discussion_. Potresti trovare qualcosa *** [qui] (https://www.safaribooksonline.com/library/view/linux-system-programming/9781449341527/ch01.html) ***. Nessuna profondità, ma più una panoramica di argomenti, tra cui API/ABI. – ryyker
@ryyker good find –
Se si sta chiedendo come vengono passati gli argomenti di chiamata di sistema al kernel, l'ABI è stabile all'interno di una determinata architettura del processore. Attraverso le architetture dei processori è possibile vedere la varianza nell'ABI. – JJF