NoGreg (le blog de LeGreg)
Retour au blog <<

[Code] DirectX de novembre sur la home page

Samedi 8 novembre 2008 à 20:13

Je voulais juste réagir au lien “DirectX de novembre” sur la home page.

Alors comment ça marche les “redistributable files” ?

En gros, un développeur d’application doit compiler son exécutable avec un ensemble de bibliothèques (”libraries”) donné. Parmi ces bibliothèques il y a la librairie Direct3DX (eks comme extended). Cette bibliothèque contient un grand nombre de fonctions précompilées qui sont utiles à la programmation de jeu (pas la peine de rentrer dans les détails ce n’est pas le but de ce poste).

Microsoft fournit et met à jour régulièrement le contenu de cette librairie D3DX avec les mises à jour de son SDK (ce ne sont donc pas juste de nouvelles docs et exemples). Mais le seul problème c’est que même si ce code est compilé avec l’application, Microsoft considèrent que le contenu du code est toujours leur responsabilité. Pourquoi ? la sécurité qui est devenu le cheval de bataille de la boîte depuis la débacle de Windows XP. Le seul moyen de contrôler la sécurité des applications compilées avec D3DX est donc de mettre le code de ces fonctions dans un conteneur séparé (une dll) et de mettre ce conteneur à un endroit unique où Microsoft peut la retrouver et la mettre à jour facilement (Windows/System32 par ex). Oui c’est en grande partie parano, mais à situation exceptionnelle, mesures exceptionnelles.

Pour éviter tout problème et contournement, Microsoft oblige donc les développeurs d’application de livrer toute application qui utilise D3DX avec l’installeur de D3DX. C’est donc le but des “redistributable files” : redist d3d de novembre = installeur des dlls de D3DX associés au SDK de novembre.

Alors est-ce que je dois télécharger et installer le redist tous les trois mois ?

La réponse courte est NON.

Tout d’abord si vous achetez un jeu, ce jeu vient avec un installeur. Cet installeur va automatiquement installer les bonnes DLLs et si vous refusez de les installer, le jeu ne fonctionnera pas c’est évident.

Alors pourquoi Microsoft propose le téléchargement du redist séparément ?

Pour des raisons politiques.

Microsoft doit contenter des milliers de développeurs et certains de ces développeurs ont des clients qui ont des demandes un peu particulières. Donc il y a eu beaucoup de va et vient entre Microsoft et ces développeurs sur quelle était la bonne stratégie à adopter vis à vis de l’installation de ces dlls.

Les développeurs ne voulaient pas augmenter la taille du package à télécharger au delà de quelques mégas supplémentaires que nécessite l’installeur des redistributable files. Ou ne souhaitaient pas créer d’installeur (qui de toute façon nécessiterait des droits admins).

Pour les jeux qui doivent être installé sans les droits admins, il n’y a pas de solution à part passer outre D3DX (c’est plus compliqué mais possible pour les gens motivés) ou mettre un lien vers le fameux redist sur le web pour que la personne qui n’a pas les droits admins puisse demander à un admin de leur installer le package en question. Pareil pour le développeur qui pour les mêmes raisons “politiques/commerciales” ne souhaite pas faire passer le coût du téléchargement des mégas de D3DX dans le coût de téléchargement du jeu lui-même..

En gros, Microsoft avait en face de lui deux choix :
- ne pas mettre ce package en ligne et donc courir le risque que les développeurs contournent ceci en mettant les dlls directement dans le répertoire du jeu. Ou pire les gens qui tapent d3dx_29.dll dans Google et le téléchargent depuis le premier lien qu’ils trouvent.. Ce qui est évidement très contre-productif sachant que la raison pour laquelle ils l’avaient mise sous forme de dlls était pour limiter les risques de sécurité (une dll téléchargée depuis n’importe quel site web bidon représente un risque de sécurité).
- offrir un lien pour ces développeurs mécontents, afin que leur jeu qui est lancé pour la première fois puisse vérifier la présence de la dll et dans le cas contraire offrir un lien pour télécharger l’installeur directement depuis le site de Microsoft. Malheureusement, beaucoup d’applications développées à la va-vite manquent ce degré de “polishing”.. Mais bon à vouloir faire trop de baby-sitting, on se retrouve avec une plate-forme fermée comme une console.

Voilà.

par Blam
8 novembre 2008 à 20:17

Merci beaucoup, très instructif.

par pthc
8 novembre 2008 à 20:23

"Le seul moyen de contrôler la sécurité des applications compilées avec D3DX est donc de mettre le code de ces fonctions dans un conteneur séparé (une dll) et de mettre ce conteneur à un endroit unique où Microsoft peut la retrouver et la mettre à jour facilement (Windows/System32 par ex)."
Je me suis arrêté là.

par LeGreg
8 novembre 2008 à 20:27

@pthc
c’est sans doute limité et/ou parano mais c’est la position officielle de Microsoft du pourquoi du comment des dlls supplémentaires.

par pthc
8 novembre 2008 à 20:32

Ils peuvent pas simplement expliquer que c’est plus simple pour mettre à jour directx (et rundll32, kernel32, etc) sans devoir recompiler tous les jeux et tout en allégeant le poids du .exe ?

Ou alors c’est le service communication qui n’a pas compris grand chose aux explications des devs microsoft.

par LeGreg
8 novembre 2008 à 20:47

"c’est plus simple pour mettre à jour directx (et rundll32,
kernel32, etc) sans devoir recompiler tous les jeux"

C’est ce que cela dit, non ? Ou alors c’est la formulation de l’article mais c’est la mienne, desole.

"alleger le poids du exe"

discutable puisque l’executable est certes le fichier .exe mais aussi les dlls qui le supportent.

par Olipro
8 novembre 2008 à 20:55

J’ai une petites interrogation sur la partie concernant "installer directx avec les jeux" :
il existe certains jeux qui, plutot que d’obliger d’installer la derniere version de directx, installent plutot tout un tas de .dll dans le meme dossier que l’éxécutable. Donc qu’est ce qu’il en est de ceux-ci ?

par LeGreg
8 novembre 2008 à 20:59

Ils ont tort (si ces dlls s’appellent msvcrt.dll, d3dx_29.dll ou d3d9.dll voire kernel32.dll).

Mais bon le PC c’est un pays libre donc ca vient avec le territoire (cf mon commentaire dans l’article sur les plateformes fermees).

par e-t172
8 novembre 2008 à 22:36

LeGreg a écrit :
> Alors est-ce que je dois télécharger et installer le redist tous les trois mois ?
>
> La réponse courte est NON.
>
> Tout d’abord si vous achetez un jeu, ce jeu vient avec un installeur. Cet installeur va automatiquement installer les bonnes DLLs et si vous refusez de les installer, le jeu ne fonctionnera pas c’est évident.

Ok, mais j’ai quand même intérêt à avoir la dernière version de cette fameuse DLL, non ? Etant donné que la dernière version a très probablement des trucs en plus par rapport à la précédente (au hasard, correction de bugs, amélioration de performances ?)

par LeGreg
8 novembre 2008 à 23:43

@e-t172

Oui et non, dans direct3d il y a deux types de dlls. Le core (noyau), qui est remis à jour très exceptionnellement. Par exemple Direct3D9 a eu trois versions du core : d3d9a, d3d9b, d3d9c. Et ces mises à jour sont poussées sur Windows Update parce qu’elles bénéficient potentiellement à tout le monde. Les dlls optionnelles elles sont remises à jour tous les trois mois potentiellement et ont chacune un nom différent (d’où les numéros : d3dx9_29.dll, d3dx9_31.dll etc.). Et selon la fréquence à laquelle tu achètes tes jeux, tu auras rarement deux jeux qui utilisent la même version. Et réinstaller une nouvelle version ne va pas mettre à jour la version qu’un jeu plus ancien utilisait. Donc en gros non pas de correction de bugs (sauf trou de sécurité), et pas d’amélioration de performance sans une recompilation du jeu lui-même avec un nouveau dxsdk.

par ASAD
9 novembre 2008 à 1:14

Merde et moi qui croyait améliorer la performance de mes jeux en gardant le directx à jours …

Alors comment utiliser le directx ? L’installer quand un jeu le demande ? (ça n’est pas super clair pour moi, surtout cette histoire de compilation du jeu)

par Mhraya
9 novembre 2008 à 1:59

ASAD : Tu peux le mettre à jour à chaque nouvelle version, ça ne va pas casser ton PC, ni prendre une place énorme sur ton disque dur… Mais si tu pensais que cela pouvait booster l’Internet de tes parents, ou améliorer les perf’ sur autre chose qu’un jeu, c’est donc faux.

Perso’ je ne le savais pas, et il pouvait m’arriver de passer à la dernière version en espérant corriger un problème. Pas plus mal, un truc en moins à faire en cas de panne ou d’erreur :-)

par LeGreg
9 novembre 2008 à 5:08

Oui le but de cet article ce n’est pas de vous dire que c’est *mal* d’installer la dernière version des redistributable files tous les trois mois. C’est juste que pour la plupart des jeux auxquels vous pourriez jouer, il est tout à fait possible de passer outre et qu’il n’y a pas forcément de bénéfice matériel à le faire. Mais vous pouvez continuer à le faire en connaissance de cause maintenant :).

par SnippyHolloW
9 novembre 2008 à 10:59

DX c’est mal !

par ap0
9 novembre 2008 à 12:08

Sources ?

par ASAD
10 novembre 2008 à 12:15

Mhraya : je te rassure je ne m’imaginais pas que DX améliorait les performances de mon navigateur internet … et j’ai l’air si jeune que ça en m’exprimant pour que tu penses que je vis chez mes vieux ? (à choisir je préférai parfois)

Merci en tout cas LeGreg pour ces précisions. ;)

Commenter

Si vous avez un compte sur WeFrag, connectez-vous pour publier un commentaire.

Tags autorisés : <a href="" title="">...</a>,<b>...</b>,<blockquote cite="">...</blockquote>,<code>...</code>,<i>...</i>.