Je pense que la solution la plus simple et la plus simple est celle du génie logiciel. L'argument est généralement le suivant: le logiciel open source est plus sûr car vous pouvez voir la source !
Avez-vous les connaissances en génie logiciel pour comprendre le noyau de haut en bas? Bien sûr, vous pouvez regarder un tel pilote, mais avez-vous une connaissance complète de ce qui se passe vraiment pour dire "ah oui, il doit y avoir un bug là-bas"?
Voici un exemple intéressant: non il y a si longtemps, un bogue de déréférence de pointeur nul est apparu dans l'un des noyaux bêta, ce qui était assez important, découvert par le gars de grsecurity (correctifs PaX):
Il a été introduit dans un morceau de code comme celui-ci:
pointer = struct->otherptr; if (pointer == NULL) {/ * gestion des erreurs * /} / * le code continue, en déréférençant ce pointeur qui, avec l'extraction optimisée, peut être NULL. Problème. * /
et la vérification pointer == NULL
a été optimisée par le compilateur, à juste titre - puisqu'un pointeur nul ne peut pas être déréférencé vers une structure contenant des membres, il n'a aucun sens pour que le pointeur de la fonction soit jamais nul. Le compilateur supprime ensuite la vérification que le développeur s'attendait à être là.
Bon, vis-à-vis, de manière concordante, le code source d'un projet aussi volumineux peut bien sembler correct - mais ne l'est pas.
Le problème est le niveau de connaissance nécessaire ici. Non seulement vous devez être assez familier avec (dans ce cas) C, l'assembly, le sous-système du noyau particulier, tout ce qui accompagne le développement des noyaux, mais vous devez également comprendre ce que fait votre compilateur.
Ne vous méprenez pas, je suis d'accord avec Linus pour dire qu'avec suffisamment d'yeux, tous les insectes sont superficiels. Le problème est la connaissance du cerveau derrière les yeux. Si vous payez 30 whiz kids pour développer votre produit mais que votre projet open source ne compte que 5 personnes qui ont une réelle connaissance de la base de code, alors il est clair que la version source fermée a une plus grande probabilité de moins de bogues, en supposant une complexité relativement similaire .
De toute évidence, c'est aussi pour tout projet donné transitoire au fil du temps, comme Thomas Pornin en parle.
Mise à jour modifiée pour supprimer les références à gcc qui sont fausses, car ce n'était pas le cas.