Λογισμικό

Με τον όρο λογισμικό υπολογιστών ή λογισμικό (αγγλ. software) ορίζεται η συλλογή από προγράμματα υπολογιστών, διαδικασίες και οδηγίες χρήσης που εκτελούν ορισμένες εργασίες σε ένα υπολογιστικό σύστημα. Ο όρος περιλαμβάνει: το λογισμικό εφαρμογών, όπως οι επεξεργαστές κειμένου, που εκτελούν παραγωγικές εργασίες για τους χρήστες, το λογισμικό συστήματος, όπως τα λειτουργικά συστήματα, που παρέχει τις αναγκαίες υπηρεσίες του υλικού στο λογισμικό εφαρμογών, το ενδιάμεσο λογισμικό (αγγλ. middleware), που ελέγχει και συντονίζει τα κατανεμημένα συστήματα, και το υλικολογισμικό (αγγλ. firmware) που προγραμματίζει σε χαμηλό επίπεδο το υλικό ενός υπολογιστή ή τα περιφερειακά του.Το λογισμικό περιλαμβάνει τα προγράμματα, τους ιστότοπους, τα βιντεοπαιχνίδια και άλλα προγράμματα που έχουν αναπτυχθεί σε μια γλώσσα προγραμματισμού όπως για παράδειγμα η C, η C++ ή η Java. Το λογισμικό είναι κωδικοποιημένο με συγκεκριμένο τρόπο, με τη βοήθεια ενός δυαδικού ψηφιακού συστήματος, ώστε να είναι «κατανοητό» από το υλικό. Ο όρος «λογισμικό» χρησιμοποιείται μερικές φορές και σε ένα ευρύτερο πλαίσιο για να περιγράψει κάτι το οποίο δεν είναι υλικό, αλλά χρησιμοποιείται με το υλικό, όπως οι ταινίες, οι δίσκοι μουσικής και τα CD.

 Ως λογισμικό υπολογιστών θεωρείται ό,τι δεν ανήκει στο υλικό (hardware) του υπολογιστή. Στο υλικό περιλαμβάνονται τα αντικείμενα που έχουν υλική υπόσταση, ενώ στο λογισμικό περιλαμβάνονται τα άυλα προγράμματα και οι εφαρμογές που υπάρχουν στο εσωτερικό του υπολογιστή. Το λογισμικό καλύπτει ένα ευρύτατο φάσμα προϊόντων και τεχνολογιών που αναπτύσσονται με χρήση διαφορετικών τεχνικών όπως οι γλώσσες προγραμματισμού, οι γλώσσες μορφοποίησης κλπ. Οι διαφορετικοί τύποι λογισμικού περιλαμβάνουν ιστοσελίδες που αναπτύσσονται με τις τεχνολογίες HTML, PHP, Perl, JSP, ASP.NET, XML, και εφαρμογές που εμφανίζονται στην επιφάνεια εργασίας, όπως το Microsoft Word και το LibreOffice Writer, που αναπτύσσονται στις γλώσσες C, C++, Java, C#, κλπ. Το λογισμικό εκτελείται συνήθως πάνω από ένα λειτουργικό σύστημα (που είναι επίσης λογισμικό), όπως τα Microsoft Windows, το Linux (με περιβάλλον GNOME ή KDE) ή το Solaris της Sun. Ως λογισμικό θεωρούνται και τα βιντεοπαιχνίδια όπως το Super Mario και το Grand Theft Auto για προσωπικούς υπολογιστές ή για κονσόλες βιντεοπαιχνιδιών. Αυτά τα παιχνίδια αναπτύσσονται από εφαρμογές CGI (computer generated imagery) αφού έχουν σχεδιαστεί πρώτα τα γραφικά τους από εφαρμογές όπως το Maya, το 3ds Max ή το Blender. Επίσης, ένα λογισμικό συνήθως λειτουργεί πάνω σε μια πλατφόρμα λογισμικού που παρέχεται είτε από λειτουργικό σύστημα ή από ανεξάρτητες πλατφόρμες όπως η πλατφόρμα της Java και η πλατφόρμα .NET. Λογισμικό γραμμένο για μία αρχιτεκτονική λογισμικού ή μια πλατφόρμα συνήθως δεν μπορεί να λειτουργεί και σε άλλες πλατφόρμες, για παράδειγμα, οι εφαρμογές των Microsoft Windows δεν θα είναι σε θέση να λειτουργήσουν σε Mac OS, λόγω των διαφορών που σχετίζονται με τις πλατφόρμες και τα πρότυπά τους. Οι εφαρμογές αυτές μπορούν να λειτουργήσουν μόνο εάν μεταφερθούν, χρησιμοποιώντας ένα διερμηνέα ή με μεταφορά (port) του πηγαίου κώδικα στην εν λόγω πλατφόρμα. Το λογισμικό υπολογιστών καλείται έτσι ώστε να διακρίνεται από το υλικό του υπολογιστή, που εποπτεύει τις φυσικές διασυνδέσεις και διατάξεις που απαιτούνται για να αποθηκευτεί και να εκτελεστεί το λογισμικό. Σε χαμηλότερο επίπεδο, το λογισμικό αποκωδικοποιείται σε γλώσσα μηχανής ειδικά προσαρμοσμένη για έναν συγκεκριμένο τύπο επεξεργαστή. Μια γλώσσα μηχανής είναι στην ουσία δυαδική αναπαράσταση των οδηγιών που στέλνονται στον επεξεργαστή ώστε να αλλάξει την κατάσταση του υπολογιστή από την προηγούμενη κατάσταση. Λογισμικό είναι η διατεταγμένη ακολουθία οδηγιών για την αλλαγή της κατάστασης του υλικού του υπολογιστή σε μια συγκεκριμένη επιθυμητή κατάσταση. Είναι συνήθως γραμμένο σε υψηλού επιπέδου γλώσσες προγραμματισμού που είναι ευκολότερες στη χρήση για τους ανθρώπους (πιο κοντά στη φυσική γλώσσα) και πιο αποτελεσματικές από την γλώσσα μηχανής. Οι υψηλού επιπέδου γλώσσες μεταγλωττίζονται σε γλώσσα μηχανής. Το λογισμικό μπορεί επίσης να είναι γραμμένο σε συμβολική γλώσσα (assembly), μια μνημονική αναπαράσταση της γλώσσας μηχανής που χρησιμοποιεί αλφάβητο φυσικής γλώσσας. Η συμβολική γλώσσα μεταφράζεται σε γλώσσα μηχανής μέσω ενός συμβολομεταφραστή (assembler). Ο όρος «λογισμικό» χρησιμοποιήθηκε για πρώτη φορά με αυτή την έννοια από τον John W. Tukey το 1958. Στην πληροφορική, λογισμικό υπολογιστών είναι όλα τα προγράμματα για ηλεκτρονικούς υπολογιστές. Αυτή η θεωρία είναι η βάση του σύγχρονου λογισμικού και προτάθηκε για πρώτη φορά από τον Άλαν Τούρινγκ το 1935 στο δοκίμιο του Υπολογίσιμοι αριθμοί με μια εφαρμογή στο Entscheidungsproblem. Στην πράξη στα υπολογιστικά συστήματα το λογισμικό διαιρείται σε τρεις κύριες κλάσεις: λογισμικό συστήματος, λογισμικό προγραμματισμού και λογισμικό εφαρμογών, αν και η διάκριση αυτή είναι αυθαίρετη, και συχνά ασαφής. Το λογισμικό συστήματος επιβοηθά τη λειτουργία του υλικού του υπολογιστή και του υπολογιστικού συστήματος. Περιλαμβάνει: λειτουργικά συστήματα, οδηγούς συσκευών (drivers). διαγνωστικά εργαλεία, servers, παραθυρικά συστήματα βοηθητικά προγράμματα και άλλα.Σκοπός του λογισμικού συστήματος είναι η απομάκρυνση του προγραμματιστή όσο το δυνατόν περισσότερο από την διαχείριση των πολύπλοκων στοιχείων του υπολογιστή, π.χ. η κύρια μνήμη και άλλα χαρακτηριστικά του υλικού, αλλά και από περιφερειακές συσκευές όπως οι εκτυπωτές, οι αναγνώστες, οι οθόνες, τα πληκτρολόγια, κ.α. Στο παρακάτω δένδρο εμφανίζονται ενδεικτικά κάποιες κατηγορίες λογισμικού - η εμφάνιση των μελών μιας κατηγορίας γίνεται με κλικ στο "+". Ευθραυστότητα λογισμικού