ΤοReactOS (React Operating System) είναι ένα λειτουργικό σύστημαανοικτού κώδικα ηλεκτρονικών υπολογιστών, το οποίο στοχεύει να είναι συμβατό με εφαρμογές και οδηγούς υλικού που προορίζονται γιαταMicrosoftWindows NT στις εκδόσεις 5.x και πάνω (Windows 2000και τους διαδόχους τους). Αποτελεί συνέχεια μιας προηγούμενης προσπάθειας δημιουργίας ενός κλόνου των Windows 95. Η ανάπτυξή του ξεκίνησε το 1998 και από τότε συνεχίζεται μετην προσθήκη χαρακτηριστικών που ήδη υπάρχουν στα Windows.
Το ReactOS είναι κυρίως γραμμένο στη γλώσσα προγραμματισμού C, με μερικά στοιχεία του, όπως τον Περιηγητή ReactOS, γραμμένα σεC++. Το έργο μεταφέρεται καισε αρχιτεκτονικές επεξεργαστών ARMκαιAMD64. Εν μέρει, υλοποιείται η λειτουργικότητα τουWindows API, μέσω της περίληψης στοιχείων από το Επίπεδο συμβατότητας για λειτουργικά συστήματα παρόμοια με Unix Wine, αλλά και μέσω πρωτότυπης υλοποίησης χαρακτηριστικών από τους προγραμματιστές. Ωστόσο, η πρόοδος καθυστερεί λόγω έλλειψης προγραμματιστών με τις απαραίτητες ικανότητες.
Ο κώδικας περνάει από εκτενή εξέταση γιανα προστατεύεται από νομικά προβλήματα, ώστε η υλοποίηση του Windows API να γίνεται μόνο μέσω διαδικασίας αντίστροφης μηχανικής «καθαρού δωματίου». Ο έλεγχος αυτός γίνεται μετά από δύο ανεξάρτητους ισχυρισμούς ενός προηγούμενου προγραμματιστή αλλά και ενός τρίτου μέρους, το 2006, ότι το έργο είτε περιείχε κώδικα από τα Windows ανακτημένο μέσα από αντισυμβολομετάφραση (disassembly), είτε αρχεία κατ' ευθείαν από τη Microsoft. Κανένας από τους δύο ισχυρισμούς δεν είχε επιζήμιες νομικές συνέπειες γιατο έργο, καιη ανάπτυξή του συνεχίζεται μέχρι σήμερα.
Αξιοσημείωτα χαρακτηριστικά του ReactOS είναι η συγκέντρωση πληροφοριών γιαμη τεκμηριωμένα API των Windows, και γενικότερα η λειτουργία του ως ανοικτού κώδικα που αντικαθιστά πλήρως τα Windows. Ο στόχος του έργου, σύμφωνα μετο ίδιο, είναι να επιτρέψει στους χρήστες των Windows να αποφύγουν πλήρως τη χρήση ιδιόκτητου εμπορικού λογισμικού χωρίς να χρειαστεί να περάσουν σε ένα εντελώς διαφορετικό λειτουργικό σύστημα, όπως τοLinux. Ωστόσο, η έλλειψη εταιρικής υποστήριξης και προγραμματιστών πλήρους απασχόλησης έχουν καθυστερήσει την επίτευξη αυτού του στόχου.
Το όνομα ReactOS το επινόησε ο ιδρυτής του έργου, Jason Filby, προγραμματιστής στηνOracle από το Durban της Νοτίου Αφρικής. Ο όρος «OS» σημαίνει «Operating System» (λειτουργικό σύστημα) καιο όρος «react» (αντίδραση) αναφέρεται στην εναντίωση της ομάδας στην μονοπωλιακή στάση της Microsoft.[2]
Γύρω στο 1996, μια ομάδα από προγραμματιστές ελεύθερου λογισμικούκαιλογισμικού ανοικτού κώδικα ξεκίνησαν ένα έργο μετο όνομα «FreeWin95» γιανα υλοποιήσουν έναν κλώνο τωνWindows 95. Το έργο καθυστέρησε πολύ στις συζητήσεις γιατο σχεδιασμό ενός τέτοιου συστήματος.
Ενώ το FreeWin95 είχε ξεκινήσει με πολύ μεγάλες προσδοκίες, μέχρι το 1997 δεν υπήρχαν ακόμα καθόλου κυκλοφορίες του λογισμικού. Ως αποτέλεσμα, τα μέλη του έργου, με συντονιστή τον Jason Filby, συνενώθηκαν γιανατο αναβιώσουν. Το νέο έργο στόχευε να αναπαράγει τη λειτουργικότητα των Windows NT. Κατά τη δημιουργία αυτού του νέου έργου επιλέχθηκε καιτο όνομα ReactOS. Το έργο ξεκίνησε να αναπτύσσεται το Φεβρουάριο του 1998 μετη δημιουργία της βάσης ενός νέου πυρήνα NT καιτων βασικών οδηγών.[3]
Στις 27 Ιανουαρίου 2006, το ReactOS αποφάσισε προσωρινά να διακόψει την πρόσβαση σε αρχεία του λειτουργικού συστήματος σε οποιονδήποτε δεν ήταν προγραμματιστής, μετά από μια συνάντηση με θέμα την επιβεβαίωση των ισχυρισμών ότι το ReactOS περιείχε κώδικα που ανήκε στην Microsoft. Πάντως, η Microsoft αρνήθηκε να κάνει κάποιο σχόλιο όταν ερωτήθηκε από το NewsForge. Επειδή το ReactOS είναι ελεύθερο και ανοικτού κώδικα έργο προγραμματισμού, οι ισχυρισμοί πυροδότησαν μια αρνητική αντίδραση από την κοινότητα του ελεύθερου λογισμικού. Συγκεκριμένα, το Wine απαγόρευσε σε μερικούς προγραμματιστές του ReactOS να συνεισφέρουν στον κώδικα του Wine, εκφράζοντας ανησυχίες γιατην προέλευση του κώδικα.[4]
Οι ισχυρισμοί έγιναν στις 17 Ιανουαρίου 2006, από τον πρώην προγραμματιστή Hartmut Birr στηλίστα ταχυδρομείουτων προγραμματιστών του ReactOS (ros-dev), ο οποίος δήλωσε ότι το ReactOS περιείχε κώδικα που προέκυψε από αντισυμβολομετάφρασητων Microsoft Windows.[5]. Ο κώδικας τον οποίο αμφισβήτησε ο Birr αφορούσε στη συνάρτηση BadStack στο syscall.S[6] καθώς καισε άλλα μη ορισμένα αντικείμενα.[7] Συγκρίνοντας αυτή τη συνάρτηση με αντισυμβολομεταφρασμένα αρχεία σε δυαδική μορφή από τα Windows XP, ο Birr στήριξε την άποψη ότι η συνάρτηση BadStack ήταν απλή αντιγραφή και επικόλληση από τα Windows XP, δεδομένου ότι ήταν τα ίδια. Ο Alex Ionescu, συγγραφέας του κώδικα, απάντησε ότι ενώ το δυαδικό από τα Windows XP όντως είχε αντισυμβολομεταφραστεί και μελετηθεί, ο κώδικας δεν ήταν απλά αντιγραμμένος και επικολλημένος, αλλά υλοποιημένος ξανά. Ο λόγος γιατον οποίο οι συναρτήσεις ήταν ίδιες, όπως είπε ο Ionescu, ήταν επειδή υπήρχε μόνο ένας πιθανός τρόπος να υλοποιηθεί η συνάρτηση.[8]
Σεμια δήλωση στη σελίδα του, το ReactOS αναφέρθηκε σε διαφορετικούς νομικούς ορισμούς τουτι αποτελεί αντίστροφη μηχανική «καθαρού δωματίου», ως αιτία της διένεξης, καθώς σε μερικές χώρες συμπεριλαμβανομένων την Ηνωμένων Πολιτειών, απαιτείται η επανυλοποίηση να γράφεται από διαφορετικό άτομο από αυτόν που εξέτασε τον αρχικό κώδικα μέσω αντισυμβολομετάφρασης, ενώ άλλες χώρες επιτρέπουν να γίνονται από το ίδιο άτομο. Συνεπώς, το ReactOS ξεκαθάρισε ότι η Δήλωση Πολιτικής τουγια Πνευματική Ιδιοκτησία θα συμμορφώνεται μετον Αμερικανικό νόμο. Κατόπιν, έγινε μια εσωτερική εξέταση όλου του πηγαίου κώδικα γιανα εξασφαλιστεί ότι μόνο αντίστροφη μηχανική καθαρού δωματίου εφαρμόστηκε, και όλοι οι προγραμματιστές υπέγραψαν μια συμφωνία δέσμευσης προς τις πολιτικές του έργου σχετικά μετην αντίστροφη μηχανική.[4]Οι συνεισφέροντες στην ανάπτυξη δεν επηρεάστηκαν από αυτά τα γεγονότα, και όλη η πρόσβαση στα εργαλεία ανάπτυξης λογισμικού αποκαταστάθηκε πολύ σύντομα. Το Σεπτέμβριο του 2007, μετην εξέταση του κώδικα να πλησιάζει στο τέλος της, αφαιρέθηκε η κατάσταση «Υπό εξέταση» από την ιστοσελίδα του ReactOS. Παρότι η εξέταση ολοκληρώθηκε, μερικές λεπτομέρειές της δε δημοσιεύτηκαν καθώς ήταν μόνο μια εσωτερική προσπάθεια γιανα εξασφαλιστεί η νομιμότητα του κώδικα.[9]
Σε ένα ξεχωριστό περιστατικό, ο προγραμματιστής του RosAsm, ο Betov, ισχυρίστηκε ότι ταπιο ύποπτα αρχεία έλειπαν από τη λίστα αρχείων προς εξέταση. Ωστόσο, το ReactOS εκτιμά ότι τα αμφισβητούμενα αρχεία ενσωματώθηκαν από τοSanos.[10]Στο μεταξύ, μετά το αρχικό του κλείδωμα, ο πηγαίος κώδικας του ReactOS παραμένει ανοικτός προς εξέταση.
Το ReactOS είναι κυρίως γραμμένο στηγλώσσα προγραμματισμού C, με μερικά στοιχεία του, όπως τον ReactOS Explorer, να είναι γραμμένα σεC++. Το έργο εξαρτάται από τοMinGWγιατη μεταγλώττισή του, και συνεισφέρει στην ανάπτυξή του μέσω της υποβολής διορθώσεων στα συστατικά του.[11]
Οι προγραμματιστές στοχεύουν να κάνουν τον πυρήνα πιο συμβατό μετα Windows NT έκδοση 5.2 (Windows Server 2003), τα API μετα Windows NT 6 (Windows Vista)[12], καινα προσθέσουν υποστήριξη για περισσότερες εφαρμογές και υλικό. ΤοDirectX υποστηρίζεται μέσω του ReactX, που αναπτύχθηκε εσωτερικά. Υπάρχει εγγενής υποστήριξη για απόδοση γραφικών (rendering) σε 2 διαστάσεις με επιτάχυνση υλικού, ενώ άλλη λειτουργικότητα μεταφέρεται στο OpenGL, ελλείψει άλλης λύσης.[13]
Η ανάπτυξη είναι περιορισμένη λόγω της έλλειψης ατόμων μετη σχετική εμπειρία. Μέχρι τον Ιανουάριο του 2011, στη σελίδα του ReactOS στοOhloh, στις πληροφορίες κάτω από τον τίτλο «Very large, active development team», αναφέρονται 34 προγραμματιστές που έχουν συνεισφέρει τους τελευταίους 12 μήνες καιστο σύνολο 107 υφιστάμενοι και προηγούμενοι χρήστες που συνεισέφεραν κώδικα στο έργο μέσω τουSubversion από τη δημιουργία του.[14]Σε αντίθεση, περίπου χίλιοι προγραμματιστές εργάστηκαν πάνω σταWindows 7, οργανωμένοι σε 25 ομάδες από περίπου 40 προγραμματιστές η κάθε μία.[15] Επιπρόσθετα, στην παρουσίασή τουστο Hackmeeting 2009 στο Μιλάνο, ο προγραμματιστής του ReactOS, Michele C. σημείωσε ότι οι περισσότεροι από τους προγραμματιστές μαθαίνουν γιατην αρχιτεκτονική των Windows ενώ δουλεύουν πάνω στο ReactOS, χωρίς προηγούμενη γνώση.[16]
Το ReactOS αξιοποιεί κώδικα από άλλα έργα όπου αυτό είναι δυνατό, ώστε οι προγραμματιστές να αποφεύγουν τη διπλή δουλειά για υφιστάμενη λειτουργικότητα, καινα αφοσιώνονται στη συμβατότητα μετα Windows σε δυαδικό επίπεδο.
Το ReactOS χρησιμοποιεί τμήματα του έργου Wine ώστε να επωφελείται από την πρόοδο του Wine στην υλοποίηση τουWin32API.[17]Τα συστατικά NTDLL, USER32, KERNEL32, GDI32 και ADVAPI του Wine δε μπορούν να χρησιμοποιηθούν από το ReactOS λόγω διαφορών στην αρχιτεκτονική, αλλά τα άλλα μέρη του κώδικα μπορούν μοιραστούν μεταξύ των δύο έργων. Τα συστατικά πουδεν είναι διαθέσιμα από το Wine, όπως ο πυρήνας, αναπτύσσονται ξεχωριστά.[11][16]
Επίσης, το πειραματικό branch Arwinss δημιουργήθηκε ως ένα εναλλακτικό μέσο παροχής βελτιωμένης υποστήριξης USER32 και GDI32 μέσω μιας εναλλακτικής υλοποίησης του Win32 API. Ενώ το αρχικό υποσύστημα Win32 ήταν πιστά σχεδιασμένο βάσει του αντίστοιχού τουστα Windows, το Arwinss συνδυάζει την αρχιτεκτονική εκείνου του υποσυστήματος μετην αντίστοιχη του Wine. Για αυτό το σκοπό, το Arwinss χρησιμοποιεί τις βιβλιοθήκες GDI32 και USER32 του Wine, με μερικές αλλαγές γιανα εκμεταλλεύεται πληρέστερα την τρέχουσα συμβατότητα λογισμικού του Wine. Το Arwinss επίσης επιτρέπει στο χρήστη προαιρετικά να χρησιμοποιεί ένα απομακρυσμένο X server αντί γιατην τοπική οθόνη.[18]
Σεμια σύντομη συνέντευξη στο Network Performance Daily, ο Art Yerkes, τότε προγραμματιστής στηSecret Level, ανέφερε ότι εισήγαγε το μέρος γιατοTCP της μεταφοράς του OSKit γιατη στοίβα δικτύωσης τουFreeBSD ως ένα μέρος της προσπάθειας να ξεκαθαρίσει καινα βελτιώσει τη λειτουργικότητα δικτύωσης. Άλλα μέρη της στοίβας δικτύωσης του ReactOS όπως οι υλοποιήσεις για πρωτόκολλα όπως τοIP, αναπτύσσονται εσωτερικά.[19]
ΤοFreeType χρησιμοποιείται γιατην εμφάνιση των γραμματοσειρών στο γραφικό περιβάλλον, ενώ τοMesa 3D παρέχει εμφάνιση OpenGL.[11]Οι οδηγοί Serial ATA παρέχονται από το UniATA. Μιαπουη τελευταία ενημέρωση του οδηγού UniATA έγινε στις 10 Σεπτεμβρίου 2008[20], το UniATA πλέον συντηρείται από τους ίδιους τους προγραμματιστές του ReactOS. Το έργο έχει επίσης πειραματιστεί μετη χρήστης της βιβλιοθήκης FullFAT κατά την εμαναδημιουργία τουFATInstallable File System.[21]
ΤαWindows NT 4.0 είχαν μεταφερθεί σε αρχιτεκτονικές άλλες από την IA-32, όπως τις MIPS, Alpha AXP, καιPowerPC, καιοι απόγονοί τους το ίδιο, μεταWindows XPνα έχουν μεταφερθεί σεAMD64, καιταWindows Server 2003σεAMD64καιItanium. Για αυτό το λόγο, οι προγραμματιστές του ReactOS έχουν εν μέρει μεταφέρει το ReactOS σε AMD64 και ARM.[13]Η υποστήριξη γιαXbox, που είναι παραλλαγή της αρχιτεκτονικής IA-32, προστέθηκε μέσω της χρήσης ενός HAL ειδικού για αρχιτεκτονική[16], παρότι αυτό, μαζί μετη μεταφορά σε PowerPC, δεν αναπτύσσονται ενεργά πλέον.[22]
Μέχρι καιτον Ιανουάριο του 2011, η ομάδα προγραμματιστών του ReactOS θεωρεί ότι το ReactOS 0.3.12 είναι λογισμικό σεστάδιο alpha, με πολλά χαρακτηριστικά να λείπουν, και ακατάλληλο για καθημερινή χρήση[22]. Ο πυρήνας δεν είναι πλήρης, και λίγες εφαρμογές των Windows τρέχουν χωρίς προβλήματα. Ωστόσο, το λειτουργικό σύστημα θεωρείται αρκετά σταθερό, και έχει πολύ μικρούς χρόνους εγκατάστασης και εκκίνησης.
Η μελλοντική σειρά εκδόσεων 0.4 θα είναι επίσης σε στάδιο alpha, ενώ η σειρά 0.5 θα είναι σεστάδιο beta, κατάλληλη για καθημερινή χρήση αλλά χωρίς να έχει ακόμα υποστεί ενδελεχή έλεγχο ποιότητας.
Αρκετοί έχουν αναγνωρίσει το ReactOS και τις συνέπειες ενός ανοικτού κώδικα που αντικαθιστά των Windows.
Στη στήλη τουγιατοFree Software Magazine, ο David Sugar σημείωσε ότι το ReactOS θα επιτρέπει τη χρήση εφαρμογών που εξαρτώνται από παλαιότερες εκδόσεις των Windows, των οποίων τα API έχουν ξεπεραστεί. Αναγνώρισε επίσης την προοπτική της επέκτασης της βάσης χρηστών ελεύθερου λογισμικού, και επίσης τη διάθεση τεκμηρίωσης για προγραμματιστές που θέλουν να γνωρίσουν τα Windows API, γιανα γράψουν φορητές εφαρμογές.[23]ΟViktor Alksnis έχει επίσης συναντηθεί μετον τρέχοντα συντονιστή του έργου, τον Aleksey Bragin, ο οποίος έκανε μια παρουσίαση καιμια επίδειξη του έργου, δείχνοντας το ReactOS να τρέχει μετονTotal CommanderκαιτονMozilla Firefox.[24]
ΣτοPC Magazine, ο συγγραφέας John C. Dvorak σημείωσε ότι η αρχιτεκτονική των Windows NT έχει παραμείνει σχεδόν ίδια μέχρι σήμερα, κάνοντάς την ιδανική για κλωνοποίηση, και πιστεύει ότι το ReactOS θα μπορούσε να είναι «μεγαλύτερη απειλή από το Linux γιατην κυριαρχία της Microsoft».[25] Πράγματι ο Aleksey Bragin έχει αναφέρει σε ένα σχόλιο στο εβδομαδιαίο Γερμανικό περιοδικό Der Spiegel ότι το ReactOS απευθύνεται σε χρήστες των Windows οι οποίοι θέλουν να αποφύγουν τη χρήση ιδιόκτητου εμπορικού λογισμικού αλλά δε θέλουν να περάσουν σε Linux.[2]
Ωστόσο, το ReactOS αντιμετωπίζει μερικές προκλήσεις. Σε απάντηση στην στήλη του Dvorak, η δημοσιογράφος τουZDNet, Dana Blankenhorn σημείωσε ότι η έλλειψη εταιρικής οικονομικής υποστήριξης και συνεργασίας έχει αυτή τη στιγμή καταστήσει το έργο ακίνδυνο γιατη Microsoft.[26][27] Συμφωνώντας, ο Thom Holwerda του OSNews κατηγοριοποίησε το ReactOS κάτω από μια οικογένεια από λειτουργικά συστήματα τα οποία ως χόμπυ αναπτύσσονται από μικρές ομάδες προγραμματιστών οι οποίοι δουλεύουν στον ελεύθερό τους χρόνο, καιδεν έχουν την οικονομική υποστήριξη τωνπιο mainstream συστημάτων, ούτε τη σημασία των παρελθόντων, όπως τοRISC OS.[28]
Το ReactOS μοιράζεται μερικές εξαρτήσεις μετοWine.
Άλλα σχετικά έργα είναι ταSamba/Samba TNG, τα οποία υλοποιούν ταLSASS, SAM, NETLOGON, Print spooling και άλλες δικτυακές υπηρεσίες των Windows.
Ένα παραπλήσιο έργο στο επίπεδο της αρχιτεκτονικής είναι οLinux Unified Kernelο οποίος σκοπεύει να είναι δυαδικά συμβατός με εφαρμογές και οδηγούς υλικού φτιαγμένους καιγια Microsoft Windows καιγια Linux. Αυτός ο πυρήνας εισάγει όλα τα κύρια χαρακτηριστικά του πυρήνα των Windows μέσα στον πυρήνα του Linux.
ΤοNdiswrapper αναδημιούργησε εν μέρει έναν πυρήνα των Windows NT μέσα στον πυρήνα του Linux ώστε να εκτελούνται σχετικά καινούριοι οδηγοί υλικού των Windows.
Ανεξάρτητα αλλά σχεδόν ταυτόχρονα μετο NDISwrapper, ο Bill Paul της εταιρείας Wind River Systems ανέπτυξε ένα παρόμοιο σύστημα, γνωστό ως Project Evil ή The NDISulator, γιατο FreeBSD. Έκτοτε έχει μεταφερθεί καιστο NetBSD, αλλά όχι στο OpenBSD, λόγω διαφορετικής πολιτικής του τελευταίου. Το NDISulator υπολείπεται κάποια από τη λειτουργικότητα του NDISwrapper, όπως η υποστήριξη USB.