Υπάρχουν ακόμα πολλά προβλήματα με τα x64 λειτουργικά, δηλαδή όχι ακριβώς με τα λειτουργικά αλλά με τους drivers (καθυστερημένα updates, πολλά bugs, κλπ). Ιδίως αν έχεις παραπάνω από 3 και κάτι ψιλά GB RAM (παίζει ανάλογα με το motherboard) τότε ετοιμάσου για έντονες περιπέτειες. Κοινώς θα βλαστημήσεις. Και φυσικά μη διανοηθείς να βάλεις 3+ GB RAM σε σύστημα με x64 CPU και x86 OS.
Δεν θα σου αναλύσω εδώ ποιό ακριβώς είναι το ζήτημα που προκαλεί αυτά τα προβλήματα. Αν έχεις περιέργεια βρες και διάβασε ένα thread που έγραψα πρόσφατα στο osronline.com, στο NTDEV forum, με τίτλο "Max 16 map registers".
Θεωρητικά ο ίδιος κώδικας θα πρέπει να έχει την ίδια συμπεριφορά είτε τρέχεις {x86.exe on x86.os}, {x86.exe on x64.os} είτε {x64.exe on x64.os}. ΘΕΩΡΗΤΙΚΑ = ΘΑ ΘΕΛΑΜΕ. Αλλά αυτό δεν ισχύει πάντα.
Μερικά παραδείγματα:
- Public key cryptography με OpenSSL. Το signature που παράγει το x86 signing exe δεν γίνεται verify από το x64 verifying exe και τανάπαλιν. Αν το sign το κάνει x86 executable, τότε το verify πρέπει επίσης να το κάνει x86 executable. Δεν ξέρω αν είναι bug ή feature, και δεν με ενδιαφέρει. Απλά συμβαίνει.
- Το x64 λειτουργικό στον kernel έχει ρουτίνα με όνομα IoIs32BitProcess, ώστε να μπορούν οι x64 drivers να διαφοροποιούν τη συμπεριφορά τους όταν μιλάνε με x86 processes. Που σημαίνει ότι ΔΕΝ κάνουν ακριβώς τα ίδια πράγματα που κάνουν για ένα x64 process, και ΔΕΝ κάνουν τα ίδια πράγματα που θα έκανε ο x86 driver.
Εγώ έφαγα 3 εβδομάδες για να βάλω στους 64-bit drivers μας υποστήριξη για 32-bit processes, διαδικασία που περιέλαβε και το εξής παράδοξο: x86 DLL που είναι built specifically για να τρέχει σε x64 συστήματα (στην DllMain ελέγχει τον τύπο του λειτουργικού και αποτυγχάνει αν δεν είναι x64, ώστε να μην την χρησιμοποιήσουμε κατά λάθος σε x86 OS. - COM: Στα x64 συστήματα, δεν μπορείς να φορτώσεις x86 DLL σε x64 process και το ανάποδο. Συνεπώς πρέπει να δώσεις και τις 2 DLL σου, να κάνεις 2 φορές register το COM object σου, μία για τα x86 processes και μία για τα x64 processes, κλπ.
- Registry Redirection/File Redirection
Συνεπώς, αν βγάζεις x86 executable (που όλοι βγάζουμε) πρέπει οπωσδήποτε να έχεις ένα x86 OS με στημένο development environment ώστε να μπορείς να δοκιμάζεις την εφαρμογή σου στο "φυσικό της περιβάλλον".
Αν θέλεις να είσαι κύριος, πρέπει να έχεις στημένο και x64 OS με development environment ώστε να δοκιμάζεις ΚΑΙ εκεί
την x86 εφαρμογή σου και να κάνεις debugging αν χρειαστεί.
Αν βγάζεις και x64 executable τότε εννοείται και πάλι ότι θέλεις x64 OS με dev env.
Εν ολίγοις πρέπει να τα έχεις και τα δύο. Μόνο με x64 δεν είσαι safe (πέρα από τα λειτουργικά προβλήματα). Αν μια x86 εφαρμογή σου λειτουργεί στο x64 λειτουργικό αυτό δεν είναι ΙΚΑΝΗ συνθήκη για να λειτουργεί χωρίς πρόβλημα σε x86 λειτουργικό.
Συνήθως θα είσαι ΟΚ βέβαια, αλλά αν θέλεις να λειτουργείς με industrial standards θα πρέπει να τα έχεις και τα δύο. Αν δεν κάνεις περίεργα πράγματα με devices τότε μπορείς να βολευτείς και με κάνα virtual machine για το ένα από τα δύο.
Είναι λίγο μανούρα να τα συντηρείς και τα δύο παράλληλα. Π.χ. ξεχνιέσαι και δουλεύεις 1 μήνα στο x86 και μετά μπουτάρεις στο x64 και βλέπεις με τρόμο 263ΜΒ updates!!! LOL... Και ήθελες ο κακομοίρης να κάνεις μια δοκιμή 5 λεπτών...
Στην εταιρία που δουλεύω πάντως, όλοι ανεξαιρέτως δουλεύουμε σε x86 λειτουργικά σε καθημερινή βάση. Και όλοι πλην ενός σε Windows Server 2003. By far ότι σταθερότερο έχει φτιάξει η MS. Vista μόνο ένας χρησιμοποιεί για καθημερινή εργασία. Ο ίδιος που δοκίμασε για κανα μήνα να δουλέψει σε XP64 και μετά ξαναγύρισε σε 2003.x86 (μέχρι που κράσαρε ο δίσκος του και έβαλε Vista). Από εκεί και μετά βέβαια έχουμε test PCs με τα πάντα επάνω.
Have fun!
The fact that the program works is irrelevant.