OVH Cloud OVH Cloud

question concernant le malloc

16 réponses
Avatar
gpg
Désolé de poster un peu en retard; mais j'ai lu un truc qui m'a terrifié il
y a un jour ou deux...

Je cite :

<QUOTE>
PAs exactement, sous Linux, l'allocation peut échouer (malloc peut
renvoyer NULL). Néanmoins, sous Linux, une allocation réussie ne
garantit pas à 100% que la zone de mémoire renvoyée puisse être utilisée.
</QUOTE>



En général, je vérifie que l'allocation reussit, genre

ptr = malloc(nanana)
if(!ptr)Traiter_problème (souvent exit...)
suite programme...

Dans quels cas le malloc est non NULL et le pointeur inutilisable ?
Comment être SUR que le résultat du malloc est utilisable ?

J'ai lu à la suite diverses considérations sur la robustesse du code, j'ai
rien percuté...

Bisous à tous, bonne dinde et merci d'avance.

6 réponses

1 2
Avatar
Gabriel Dos Reis
Erwann ABALEA writes:

| Je ne vois pas comment un système Bien Conçu (tm) pourrait se sortir de
| cette situation sans tuer quelques process.

Le point était qu'un système bien conçu s'abstiendrait d'user de la
stupidité où l'utilisation de la valeur de retour (non nulle !) de
malloc provoque l'effondrement du système. Ou bien, il n'y a pas de
mémoire suffisante et l'implémentation remplit le contrat spécifié dans
la documentation en renvoyant un pointeur nul, ou bien il y en a assez
et il renvoie un pointeur sur une zone de mémoire utilisable selon le
contrat spécifié.

Cette idée d'overcommit n'est pas une nouveauté inventée par le
système que tu cites. Elle a bien longtemps existé dans d'autres OS
commerciaux, qui l'ont essayée sur leurs utilisateurs avant de
finalement l'abandonner -- sur la pression des utilisateurs et
devant le besoin de plus de robustesse. Mais, les mauvaies idées ont
la vie dure, spécialement dans certaines parties du ghetto du logiciel
dit libre.

-- Gaby
Avatar
Erwann ABALEA
On 26 Dec 2003, Gabriel Dos Reis wrote:

Erwann ABALEA writes:

| Je ne vois pas comment un système Bien Conçu (tm) pourrait se sortir de
| cette situation sans tuer quelques process.

Le point était qu'un système bien conçu s'abstiendrait d'user de la
stupidité où l'utilisation de la valeur de retour (non nulle !) de


Ca tombe bien, c'est comme ça que ça marche aujourd'hui sous Linux, en
2.4.x au moins.

malloc provoque l'effondrement du système. Ou bien, il n'y a pas de
mémoire suffisante et l'implémentation remplit le contrat spécifié dans
la documentation en renvoyant un pointeur nul, ou bien il y en a assez
et il renvoie un pointeur sur une zone de mémoire utilisable selon le
contrat spécifié.


Du point de vue du noyau, l'overcommit n'était pas utilisé simplement lors
d'un appel à malloc(), il est utilisé lors de toute allocation mémoire, en
gros tout ce qui se termine par un mmap(), y compris une allocation
statique comme celle-ci:

unsigned char mongrosbuffer[1024*1024];

Cette idée d'overcommit n'est pas une nouveauté inventée par le
système que tu cites.


Note que je ne l'ai jamais prétendu.

Elle a bien longtemps existé dans d'autres OS
commerciaux, qui l'ont essayée sur leurs utilisateurs avant de
finalement l'abandonner -- sur la pression des utilisateurs et
devant le besoin de plus de robustesse. Mais, les mauvaies idées ont
la vie dure, spécialement dans certaines parties du ghetto du logiciel
dit libre.


Et ses detracteurs ont la rancune tenace, puisque l'overcommit est
contrôlable et désactivé depuis au moins le kernel 2.3.99, qui date de
mars à mai 2000, soit il y a plus de 3 ans et demi. Sur mon noyau 2.2.20,
l'overcommit me semblait contrôlable et désactivé, mais j'ai réussi à
allouer 3 Go de mémoire sur ma brouette, ce qui semble montrer que ce
contrôle ne fonctionne pas; d'un autre côté, c'est une RedHat, et il est
possible que RedHat ait patché cette partie aussi (ils sont connus pour
ça). J'ai refais le test sur un 2.4.18, et je n'ai eu droit qu'à la
mémoire réellement disponible, Amen.

Quoi qu'il en soit, même parmi les acteurs du libre (dont tu fais partie
pour ton travail sur gcc, et je t'en remercie) on trouve des colporteurs
de ragots qui ne vérifient pas leurs infos. Par exemple, en août 2003,
parmi les développeurs de PostgreSQL, on trouvait encore des gens qui
proposaient de placer la valeur 3 à la variable système overcommit_memory
pour supprimer l'overcommit (avec un peu plus de contrôle qu'en plaçant un
2, soit disant). Il suffit de lire le source du noyau 2.4.x pour se rendre
compte que cette variable n'est pas utilisée comme ça, qu'elle n'a que 2
valeurs utiles: nul, et non nul, et qu'une valeur non nulle autorise
l'overcommit, ayant du même coup l'effet contraire de ce qu'ils
souhaitaient. Cette vérification prend 5 minutes (mesure obtenue par un
time(), et non un clock(), pour rester en charte).

Alors arrêtons de lire des pages de manuel de 1993 (c'est l'année de ma
page de man de malloc(3) sur mon système) et de s'alarmer en lisant ce qui
se faisait à la préhistoire de Linux (qui a passé le cap du 1.0 courant
94), et concentrons nous sur ce qui se passe aujourd'hui, en essayant de
s'adapter. Windows est maintenant multitâche préemptif (depuis NT), et
personne n'irait dire aujourd'hui que Windows ne fait que du multitâche
coopératif (ce qu'il faisait avant). Qui installe encore du Windows 3.1 en
production de nos jours?

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Usenet: lisez bourré, postez déchirés.
-+- LC in <http://neuneu.mine.nu> : Le postage sans peine. -+-

Avatar
Gabriel Dos Reis
Erwann ABALEA writes:

| On 26 Dec 2003, Gabriel Dos Reis wrote:
|
| > Erwann ABALEA writes:
| >
| > | Je ne vois pas comment un système Bien Conçu (tm) pourrait se sortir de
| > | cette situation sans tuer quelques process.
| >
| > Le point était qu'un système bien conçu s'abstiendrait d'user de la
| > stupidité où l'utilisation de la valeur de retour (non nulle !) de
|
| Ca tombe bien, c'est comme ça que ça marche aujourd'hui sous Linux, en
| 2.4.x au moins.

cela marchait comme cela bien avant, avec la 2.2.x, avec les
modifications idiones -- du moins avec SuSE, c'est comme cela que j'ai
fini par régler le problème. Cela n'enlève rien aux dommages colatéraux.

| > malloc provoque l'effondrement du système. Ou bien, il n'y a pas de
| > mémoire suffisante et l'implémentation remplit le contrat spécifié dans
| > la documentation en renvoyant un pointeur nul, ou bien il y en a assez
| > et il renvoie un pointeur sur une zone de mémoire utilisable selon le
| > contrat spécifié.
|
| Du point de vue du noyau, l'overcommit n'était pas utilisé simplement lors
| d'un appel à malloc(), il est utilisé lors de toute allocation mémoire, en
| gros tout ce qui se termine par un mmap(), y compris une allocation
| statique comme celle-ci:
|
| unsigned char mongrosbuffer[1024*1024];

Cela fait partie de la stupidité à laquelle je faisais allusion.

Par exemple, la fonction malloc() -- dont il est question ici -- est
suffisamment spéciale pour ne pas faire l'objet de fantasmes avec les
conséquences que l'on sait. Ce n'est pas pour rien que le C distingue
l'allocation statique de l'allocation dynamique.

| > Cette idée d'overcommit n'est pas une nouveauté inventée par le
| > système que tu cites.
|
| Note que je ne l'ai jamais prétendu.
|
| > Elle a bien longtemps existé dans d'autres OS
| > commerciaux, qui l'ont essayée sur leurs utilisateurs avant de
| > finalement l'abandonner -- sur la pression des utilisateurs et
| > devant le besoin de plus de robustesse. Mais, les mauvaies idées ont
| > la vie dure, spécialement dans certaines parties du ghetto du logiciel
| > dit libre.
|
| Et ses detracteurs ont la rancune tenace, puisque l'overcommit est
| contrôlable et désactivé depuis au moins le kernel 2.3.99, qui date de

(1) tu le sais, mais je le rappelle pour l'assistance, les noyaux
2.x.y avec x impair sont des versions expérimentales, par
définition instables, et on ne s'attend pas à ce que tout le
monde l'installe.

(2) visiblement, tu n'as pas été sérieusement mordu par cette
erreur stupide -- par exemple, perdre des données de calculs
précieux, parce que qu'un a fait mumuse avec l'implémentation
de malloc.

| mars à mai 2000, soit il y a plus de 3 ans et demi. Sur mon noyau 2.2.20,
| l'overcommit me semblait contrôlable et désactivé, mais j'ai réussi à
| allouer 3 Go de mémoire sur ma brouette, ce qui semble montrer que ce
| contrôle ne fonctionne pas; d'un autre côté, c'est une RedHat, et il est
| possible que RedHat ait patché cette partie aussi (ils sont connus pour
| ça). J'ai refais le test sur un 2.4.18, et je n'ai eu droit qu'à la
| mémoire réellement disponible, Amen.

Tu vois que tu utilises encore 2.2.20 -- alors ne blâme pas ceux qui
l'utilisent encore et sont victimes de cette stupidité à propos de malloc.

| Quoi qu'il en soit, même parmi les acteurs du libre (dont tu fais partie
| pour ton travail sur gcc, et je t'en remercie) on trouve des colporteurs
| de ragots qui ne vérifient pas leurs infos. Par exemple, en août 2003,
| parmi les développeurs de PostgreSQL, on trouvait encore des gens qui
| proposaient de placer la valeur 3 à la variable système overcommit_memory
| pour supprimer l'overcommit (avec un peu plus de contrôle qu'en plaçant un
| 2, soit disant). Il suffit de lire le source du noyau 2.4.x pour se rendre
| compte que cette variable n'est pas utilisée comme ça, qu'elle n'a que 2
| valeurs utiles: nul, et non nul, et qu'une valeur non nulle autorise
| l'overcommit, ayant du même coup l'effet contraire de ce qu'ils
| souhaitaient. Cette vérification prend 5 minutes (mesure obtenue par un
| time(), et non un clock(), pour rester en charte).

Tu n'as jamais rencontré des gens qui invoquent GCC avec -On, où n > 3 ?
;-p

Je crois qu'il y a une habitude que le monde dit du logiciel libre
doit abandonner, si il veut être pris au sérieux et être un
compétiteur serieux : arrêter de dire que parce que le source est
diposnible, l'utilisateur peut tout modifier (même si cette liberté
lui conférée par les licences idioines) et arrêter les
expérimentations hasardeuses -- même si elles sont corrigées plus tard.
Il est plus dur de corriger une mauvaise réputation et perdurer une
bonne nouvelle ou une bonne cote. Dans les limites de mes moyens

| Alors arrêtons de lire des pages de manuel de 1993 (c'est l'année de ma
| page de man de malloc(3) sur mon système) et de s'alarmer en lisant ce qui
| se faisait à la préhistoire de Linux (qui a passé le cap du 1.0 courant
| 94), et concentrons nous sur ce qui se passe aujourd'hui, en essayant de
| s'adapter.

Aux dernière nouvelles, 2.2.x ne date pas de 1993.

| Windows est maintenant multitâche préemptif (depuis NT), et
| personne n'irait dire aujourd'hui que Windows ne fait que du multitâche
| coopératif (ce qu'il faisait avant).

parce que personne n'irait argumenter qu'il suffit de lire le source
de Windows pour s'en rendre compte et que cela ne prendrait que 5
minutes, chrono en main ? ;-p

| Qui installe encore du Windows 3.1 en
| production de nos jours?

Tu noteras que Windows 3.1 ne date pas de la même année que Linux
2.2.x. J'ai travaillé l'an dernier dans un « grand institut » français
de recherche en informatique où le noyau installé était de la
préhistoire par rapport à ce que j'utilisais à la maison.

-- Gaby
Avatar
espie
In article ,
Gabriel Dos Reis wrote:
Je crois qu'il y a une habitude que le monde dit du logiciel libre
doit abandonner, si il veut être pris au sérieux et être un
compétiteur serieux : arrêter de dire que parce que le source est
diposnible, l'utilisateur peut tout modifier (même si cette liberté
lui conférée par les licences idioines) et arrêter les
expérimentations hasardeuses -- même si elles sont corrigées plus tard.
Il est plus dur de corriger une mauvaise réputation et perdurer une
bonne nouvelle ou une bonne cote. Dans les limites de mes moyens


Par exemple, fournir a l'utilisateur des tonnes de boutons et d'options,
comme ca, il peut configurer son systeme exactement comme il veut...
et en particulier, ca permet de lui deleguer cette responsabilite, et les
problemes qui vont avec: on peut lui donner des valeurs par defaut
moyennes, voire pas bonnes du tout. On n'est pas responsables puisque
l'utilisateur peut tout changer. C'est encore une fois le tres celebre
modele du design par comite: comme on n'arrive pas a prendre une decision
forte, on ne prend pas du tout la decision, et on laisse a l'utilisateur
final le choix... ainsi que la capacite a essuyer les platres.

Alors que la bonne approche, c'est de prendre la decision, de donner a
l'utilisateur quelque chose qui fonctionne. (et si ca ne lui plait
pas tout a fait, il peut changer, mais au moins, on considere que le
comportement par defaut est le fruit d'un choix conscient, et non pas
juste la valeur qui reste quand personne n'a pris de decision...

Avatar
Erwann ABALEA
On 26 Dec 2003, Gabriel Dos Reis wrote:

Erwann ABALEA writes:

| On 26 Dec 2003, Gabriel Dos Reis wrote:
|
| > Erwann ABALEA writes:


[...]
| > malloc provoque l'effondrement du système. Ou bien, il n'y a pas de
| > mémoire suffisante et l'implémentation remplit le contrat spécifié dans
| > la documentation en renvoyant un pointeur nul, ou bien il y en a assez
| > et il renvoie un pointeur sur une zone de mémoire utilisable selon le
| > contrat spécifié.
|
| Du point de vue du noyau, l'overcommit n'était pas utilisé simplement lors
| d'un appel à malloc(), il est utilisé lors de toute allocation mémoire, en
| gros tout ce qui se termine par un mmap(), y compris une allocation
| statique comme celle-ci:
|
| unsigned char mongrosbuffer[1024*1024];

Cela fait partie de la stupidité à laquelle je faisais allusion.

Par exemple, la fonction malloc() -- dont il est question ici -- est
suffisamment spéciale pour ne pas faire l'objet de fantasmes avec les
conséquences que l'on sait. Ce n'est pas pour rien que le C distingue
l'allocation statique de l'allocation dynamique.


Ah ben oui, autoriser un mmap() quand il n'y a pas assez de pages pour le
satisfaire, ça a un effet de bord sur le malloc(). On peut effectivement
ranger ça dans la catégorie des "dommages colatéraux".
Mais une machine qui n'autorise pas l'overcommit, et qui a la mémoire ras
la gueule de process inutiles ou nuisibles, elle devient tout aussi
inutilisable. Le noyau ne tuera pas de process pour faire le ménage, c'est
vrai. Donc elle ne devrait pas rebooter, juste swapper jusqu'à ce que
mort s'en suive et refuser l'exécution de n'importe quoi d'autre, même un
login. Pas tellement mieux. La solution à ce problème est simple: faire de
l'accounting, et placer des barrières. Mais c'est aussi valable avec de
l'overcommit autorisé.

[...]
| > Elle a bien longtemps existé dans d'autres OS
| > commerciaux, qui l'ont essayée sur leurs utilisateurs avant de
| > finalement l'abandonner -- sur la pression des utilisateurs et
| > devant le besoin de plus de robustesse. Mais, les mauvaies idées ont
| > la vie dure, spécialement dans certaines parties du ghetto du logiciel
| > dit libre.


Je vois au passage que certains développeurs se trouvent embêtés en
décembre 2003 que l'overcommit soit désactivé par défaut, parce que ça
empêche un programme qui déclare un buffer statique de 256Mo d'être
exécuté sur une machine avec seulement 64M de mémoire... C'est comme ça
que les développeurs de Wine voient les choses. (Je ne partage pas leur
avis, et chercher à allouer statiquement un gros bloc de 256Mo sans
discernenement, à mon avis, c'est une c*nnerie). Ils ne sont pas les
seuls, puisque VMWare pratique également l'overcommit, mais à un niveau
utilisateur, lui.
Des gorets partout, le monde est rempli de gorets. ;)

| Et ses detracteurs ont la rancune tenace, puisque l'overcommit est
| contrôlable et désactivé depuis au moins le kernel 2.3.99, qui date de

(1) tu le sais, mais je le rappelle pour l'assistance, les noyaux
2.x.y avec x impair sont des versions expérimentales, par
définition instables, et on ne s'attend pas à ce que tout le
monde l'installe.


Bon. Alors on peut parler du noyau 2.4.0, qui est sorti le 4 janvier 2001.
J'ai vu un patch pour le 2.4.1 sorti le 29 janvier 2001 à propos de
l'overcommit, et le résultat de ce patch est presque exactement ce qu'on
trouve encore dans le 2.4.23 (dernière version stable en 2.4). Les
différences se situent dans le fait que le patch proposait un comportement
différent pour un process root, et ce comportement différent a été
supprimé depuis.

(2) visiblement, tu n'as pas été sérieusement mordu par cette
erreur stupide -- par exemple, perdre des données de calculs
précieux, parce que qu'un a fait mumuse avec l'implémentation
de malloc.


Je ne prète pas ma machine à des gorets ;)
Quel supplice as-tu infligé au coupable? Le pal, la pendaison, le
bannissement, ... ? :)

[...]
Tu vois que tu utilises encore 2.2.20 -- alors ne blâme pas ceux qui
l'utilisent encore et sont victimes de cette stupidité à propos de malloc.


J'ai la chance de ne pas faire tourner de bloatware dessus, c'est mon
firewall à la maison (que je vais changer, je sais, un firewall stateless
c'est nul).

| Quoi qu'il en soit, même parmi les acteurs du libre (dont tu fais partie
| pour ton travail sur gcc, et je t'en remercie) on trouve des colporteurs
| de ragots qui ne vérifient pas leurs infos. Par exemple, en août 2003,
| parmi les développeurs de PostgreSQL, on trouvait encore des gens qui
| proposaient de placer la valeur 3 à la variable système overcommit_memory
| pour supprimer l'overcommit (avec un peu plus de contrôle qu'en plaçant un
| 2, soit disant). Il suffit de lire le source du noyau 2.4.x pour se rendre
| compte que cette variable n'est pas utilisée comme ça, qu'elle n'a que 2
| valeurs utiles: nul, et non nul, et qu'une valeur non nulle autorise
| l'overcommit, ayant du même coup l'effet contraire de ce qu'ils
| souhaitaient. Cette vérification prend 5 minutes (mesure obtenue par un
| time(), et non un clock(), pour rester en charte).

Tu n'as jamais rencontré des gens qui invoquent GCC avec -On, où n > 3 ?
;-p


Oh si... Pendant un moment, je voyais souvent des -O6 d'ailleurs... Je ne
sais pas pourquoi 6 et pas 9.

Je crois qu'il y a une habitude que le monde dit du logiciel libre
doit abandonner, si il veut être pris au sérieux et être un
compétiteur serieux : arrêter de dire que parce que le source est
diposnible, l'utilisateur peut tout modifier (même si cette liberté
lui conférée par les licences idioines)


D'accord sur ce point, même si pour certains, l'accès au source est
réellement un avantage. Ils ne sont pas nombreux, mais ils existent.

et arrêter les
expérimentations hasardeuses -- même si elles sont corrigées plus tard.
Il est plus dur de corriger une mauvaise réputation et perdurer une
bonne nouvelle ou une bonne cote. Dans les limites de mes moyens


Tout le monde fait des conneries, le libre pas plus que les autres.
Qu'est-ce qui a poussé Intel a faire un processeur aussi batard que le
286? Qu'est-ce qui a poussé Microsoft à quitter l'alliance avec IBM pour
sortir un Windows aussi peu professionnel que Windows 3.x quand ils
avaient un produit aussi prometteur qu'OS/2? La facilité, la rapidité, le
marketing produit.

| Windows est maintenant multitâche préemptif (depuis NT), et
| personne n'irait dire aujourd'hui que Windows ne fait que du multitâche
| coopératif (ce qu'il faisait avant).

parce que personne n'irait argumenter qu'il suffit de lire le source
de Windows pour s'en rendre compte et que cela ne prendrait que 5
minutes, chrono en main ? ;-p


"C'est nul le C, il n'y a pas de type booléen, c'est vraiment un langage
de tapette." ;)

| Qui installe encore du Windows 3.1 en
| production de nos jours?

Tu noteras que Windows 3.1 ne date pas de la même année que Linux
2.2.x.


Oui, mais je pense sans pouvoir l'affirmer que Windows 95 et Windows 98
font aussi du multitâche coopératif, aussi j'ai cité Windows 3.1, pour
assurer. Et pour le coup, Windows 95/98 et le noyau 2.2.x étaient
contemporains (en utilisation).

J'ai travaillé l'an dernier dans un « grand institut » français
de recherche en informatique où le noyau installé était de la
préhistoire par rapport à ce que j'utilisais à la maison.


Si c'était un « grand institut », le noyau devait bien avoir quelques
particularités, non? ;)


Pour clore de mon côté, je dirais que je trouve effectivement que
l'overcommit est une stupidité, et je ne vois pas comment on peut faire
de l'overcommit 'propre' (i.e. autoriser l'overcommit, tout en se
réservant le droit de tuer le process qui fout le plus le bordel) *à coup
sûr*.

Donc pour ceux que l'overcommit sous Linux dérange, soit vous patchez
votre noyau 2.x (x < 4), soit vous passez en 2.4.x. Et vous avez alors des
malloc() qui marchent bien.

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
bien que ma carte son supporte le 800*600, linux est afficher en
480*640, comment changer ce parametre ?
-+-T in GNU : Linux habens découvre le multimedia -+-

Avatar
Gabriel Dos Reis
Erwann ABALEA writes:

[...]

| > (2) visiblement, tu n'as pas été sérieusement mordu par cette
| > erreur stupide -- par exemple, perdre des données de calculs
| > précieux, parce que qu'un a fait mumuse avec l'implémentation
| > de malloc.
|
| Je ne prète pas ma machine à des gorets ;)
| Quel supplice as-tu infligé au coupable? Le pal, la pendaison, le
| bannissement, ... ? :)

il est déclaré hérétique et banni.

| [...]
| > Tu vois que tu utilises encore 2.2.20 -- alors ne blâme pas ceux qui
| > l'utilisent encore et sont victimes de cette stupidité à propos de malloc.
|
| J'ai la chance de ne pas faire tourner de bloatware dessus, c'est mon
| firewall à la maison (que je vais changer, je sais, un firewall stateless
| c'est nul).
|
| > | Quoi qu'il en soit, même parmi les acteurs du libre (dont tu fais partie
| > | pour ton travail sur gcc, et je t'en remercie) on trouve des colporteurs
| > | de ragots qui ne vérifient pas leurs infos. Par exemple, en août 2003,
| > | parmi les développeurs de PostgreSQL, on trouvait encore des gens qui
| > | proposaient de placer la valeur 3 à la variable système overcommit_memory
| > | pour supprimer l'overcommit (avec un peu plus de contrôle qu'en plaçant un
| > | 2, soit disant). Il suffit de lire le source du noyau 2.4.x pour se rendre
| > | compte que cette variable n'est pas utilisée comme ça, qu'elle n'a que 2
| > | valeurs utiles: nul, et non nul, et qu'une valeur non nulle autorise
| > | l'overcommit, ayant du même coup l'effet contraire de ce qu'ils
| > | souhaitaient. Cette vérification prend 5 minutes (mesure obtenue par un
| > | time(), et non un clock(), pour rester en charte).
| >
| > Tu n'as jamais rencontré des gens qui invoquent GCC avec -On, où n > 3 ?
| > ;-p
|
| Oh si... Pendant un moment, je voyais souvent des -O6 d'ailleurs... Je ne
| sais pas pourquoi 6 et pas 9.

« 9 », c'est pas la kabale ? ;-p

| > Je crois qu'il y a une habitude que le monde dit du logiciel libre
| > doit abandonner, si il veut être pris au sérieux et être un
| > compétiteur serieux : arrêter de dire que parce que le source est
| > diposnible, l'utilisateur peut tout modifier (même si cette liberté
| > lui conférée par les licences idioines)
|
| D'accord sur ce point, même si pour certains, l'accès au source est
| réellement un avantage. Ils ne sont pas nombreux, mais ils existent.

Oh, je ne nie pas ce point. Sans être un évangéliste GNU canal
historique, je suis pour l'accès sans restriction aux logiciels et aux
sources. Mais je suis également pour un minimum de discernement et de
responsabilité (voir l'autre message de Marc) .

[...]

| > | Windows est maintenant multitâche préemptif (depuis NT), et
| > | personne n'irait dire aujourd'hui que Windows ne fait que du multitâche
| > | coopératif (ce qu'il faisait avant).
| >
| > parce que personne n'irait argumenter qu'il suffit de lire le source
| > de Windows pour s'en rendre compte et que cela ne prendrait que 5
| > minutes, chrono en main ? ;-p
|
| "C'est nul le C, il n'y a pas de type booléen, c'est vraiment un langage
| de tapette." ;)

Là, c'est un peu plus crédible :-p

[...]

| > J'ai travaillé l'an dernier dans un « grand institut » français
| > de recherche en informatique où le noyau installé était de la
| > préhistoire par rapport à ce que j'utilisais à la maison.
|
| Si c'était un « grand institut », le noyau devait bien avoir quelques
| particularités, non? ;)

si si, mais pas celles que j'aurais voulues :-/

[...]

| Donc pour ceux que l'overcommit sous Linux dérange, soit vous patchez
| votre noyau 2.x (x < 4), soit vous passez en 2.4.x. Et vous avez alors des
| malloc() qui marchent bien.

-- Gaby
1 2