La libc Solaris est-elle basée sur la libc GNU?

Sur Solaris:

basename.c

#include <stdio.h> #include <libgen.h> int main(int argc, char* argv[]) { int len = strlen(argv[0]); char *bsname = basename(argv[0]); printf("%s\n", bsname); printf("%d\n", len); return 0; } 
 cc basename.c ldd a.out 

sortie:

 libc.so.1 => /lib/libc.so.1 libm.so.1 ...... 

Sur Linux:

basename.c

 #include <stdio.h> #include <libgen.h> int main(int argc, char* argv[]) { int len = strlen(argv[0]); char *bsname = basename(argv[0]); printf("%s\n", bsname); printf("%d\n", len); return 0; } 
 gcc basename.c ldd a.out 

sortie:

 libc.so.6 => /lib/libc.so.6 ...... 

Solaris libc est-il basé sur GNU libc? libc.so.1 sur Solaris est-il identique à libc.so.6 sous Linux?

La bibliothèque Solaris C n'est pas basée sur la bibliothèque C GNU. Ils implémentent tous deux la norme C et les interfaces POSIX et d'autres normes, mais ils ne partagent pas un inheritance commun au-delà.

Solaris libc.so.1 trace son historique dans la bibliothèque AT & T System VC.

GNU libc.so.6 est basé sur glibc 2.0 ou supérieur. Les versions antérieures (par exemple libc.so.5) de la bibliothèque C de Linux étaient une twig d'une version antérieure de la glibc 1.x.

Vous verrez qu'il y a une certaine différence entre les deux bibliothèques. Par exemple, Solaris libc contient certaines opérations de string que glibc ne fait pas, strlcpy () étant la plus évidente pour moi.

Solaris libc n'est pas du tout basé sur GNU libc, mais ils fournissent des interfaces similaires.

Pourquoi? Parce qu'ils s'appellent tous deux libc ?

Non.

Ils sont tous les deux appelés libc car GNU libc essaie d'être un rlocation compatible pour la libc sur les Unices propriétaires. C'est la raison pour laquelle la licence LGPL a été créée .

Une search rapide sur le Web montre une partie du code source de Solaris libc . En choisissant un file au hasard, les messages de copyright là-bas disent

 /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ 

donc il devrait être assez évident que le code ne vient pas de GNU.