Snap (λογισμικό)

Το **Snap** είναι ένα σύστημα συσκευασίας και ανάπτυξης λογισμικού που αναπτύχθηκε από την εταιρεία Canonical για λειτουργικά συστήματα που βασίζονται στον πυρήνα Linux και χρησιμοποιούν το σύστημα εκκίνησης systemd. Τα πακέτα αυτού του συστήματος ονομάζονται *snaps* και το εργαλείο διαχείρισής τους στο παρασκήνιο ονομάζεται snapd. Το σύστημα λειτουργεί σε μια μεγάλη ποικιλία διανομών Linux  και επιτρέπει στους δημιουργούς λογισμικού να διανέμουν τις εφαρμογές τους απευθείας στους τελικούς χρήστες. Τα snaps είναι αυτόνομες εφαρμογές (περιέχουν δηλαδή όλες τις απαραίτητες εξαρτήσεις τους) που εκτελούνται σε ένα πλήρως απομονωμένο περιβάλλον (sandbox), με ελεγχόμενη πρόσβαση στο σύστημα υποδοχής.

## Αρχιτεκτονική και Λειτουργικότητα

### Απομονωμένο περιβάλλον (Sandbox)
Οι εφαρμογές σε ένα Snap εκτελούνται σε ένα περιορισμένο περιβάλλον (container) χωρίς άμεση πρόσβαση στο σύστημα του υπολογιστή. Μέσω "Διεπαφών" (Interfaces), οι χρήστες μπορούν να παραχωρήσουν σε μια εφαρμογή συγκεκριμένα δικαιώματα, όπως πρόσβαση στην κάμερα, στο μικρόφωνο ή σε συσκευές USB.  Οι εφαρμογές με γραφικό περιβάλλον (GUI) μπορούν επίσης να χρησιμοποιήσουν τις πύλες `XDG Desktop Portals` (ένα τυποποιημένο API που αναπτύχθηκε αρχικά από το έργο Flatpak) το οποίο ζητά δυναμικά την άδεια του χρήστη τη στιγμή που η εφαρμογή προσπαθεί να χρησιμοποιήσει έναν πόρο (π.χ. άνοιγμα ενός τοπικού αρχείου).  

Το sandbox του Snap υποστηρίζει επίσης την κοινή χρήση δεδομένων και υποδοχών Unix μεταξύ των Snaps.  Αυτό χρησιμοποιείται συχνά για την κοινή χρήση κοινών βιβλιοθηκών και πλαισίων εφαρμογών μεταξύ των Snaps, με σκοπό τη μείωση του μεγέθους των Snaps, αποφεύγοντας την επικάλυψη. 

Το σύστημα ασφαλείας του Snap βασίζεται σε μεγάλο βαθμό στο σύστημα AppArmor Linux του πυρήνα Linux. Eπειδή στον πυρήνα Linux μπορεί να είναι ενεργή μόνο μία κύρια μονάδα ασφαλείας (LSM) κάθε φορά,  το επίπεδο απομόνωσης του Snap υποβαθμίζεται σημαντικά σε διανομές (όπως το Fedora) που χρησιμοποιούν από προεπιλογή το ανταγωνιστικό σύστημα SELinux. Παρόλο που η Canonical συνεργάζεται με πολλούς άλλους προγραμματιστές και εταιρείες για να καταστήσει δυνατή την ταυτόχρονη εκτέλεση πολλαπλών LSM, το 2020 αυτή η λύση ήταν ακόμα πολύ μακριά. 

### Μορφή αρχείων και απόδοση
Η μορφή ενός αρχείου `.snap` είναι ουσιαστικά ένα συμπιεσμένο σύστημα αρχείων τύπου SquashFS. Το αρχείο περιέχει την ίδια την εφαρμογή, όλες τις βιβλιοθήκες από τις οποίες εξαρτάται και τα απαραίτητα μεταδεδομένα. Κατά την εκτέλεση, το πακέτο δεν αποσυμπιέζεται μόνιμα στον δίσκο, αλλά προσαρτάται (mount) δυναμικά από το λειτουργικό σύστημα. Αν και αυτή η μέθοδος εξοικονομεί αποθηκευτικό χώρο, έχει το μειονέκτημα ότι ορισμένες μεγάλες εφαρμογές (όπως τα προγράμματα περιήγησης ιστού) αντιμετωπίζουν πιο αργούς χρόνους εκκίνησης (slow cold start). Για τη μείωση του όγκου, το Snap επιτρέπει την κοινή χρήση βασικών βιβλιοθηκών μεταξύ διαφορετικών εφαρμογών.

### Αυτόματες ενημερώσεις και Κανάλια
Το λογισμικό `snapd` ελέγχει στο παρασκήνιο (πολλές φορές την ημέρα) για διαθέσιμες ενημερώσεις και τις εγκαθιστά αυτόματα. Οι ενημερώσεις μπορούν να αναιρεθούν,  ενώ χρησιμοποιούν κωδικοποίηση δέλτα (delta encoding) για να κατεβάζουν μόνο τα δεδομένα που έχουν αλλάξει. 

Οι προγραμματιστές μπορούν να διανέμουν διαφορετικές εκδόσεις μέσω "Καναλιών" (Channels). Για παράδειγμα, το κανάλι `stable` προορίζεται για σταθερές εκδόσεις, το `beta` για δοκιμαστικές, ενώ οι χρήστες μπορούν να "κλειδώσουν" μια εφαρμογή σε μια παλαιότερη κύρια έκδοση (π.χ. `2.0/stable`) ώστε να λαμβάνουν μόνο ενημερώσεις ασφαλείας χωρίς να αλλάξει ριζικά το πρόγραμμα.

Οι χρήστες έχουν τη δυνατότητα να ρυθμίσουν το χρονοδιάγραμμα των ενημερώσεων ή να τις παύσουν εντελώς, ενώ οι ενημερώσεις σταματούν αυτόματα σε συνδέσεις με ογκοχρέωση δεδομένων.   

### Snapcraft

Το Snapcraft είναι το επίσημο εργαλείο που χρησιμοποιούν οι προγραμματιστές για να «πακετάρουν» τις εφαρμογές τους.  Λειτουργεί σε οποιαδήποτε διανομή Linux που υποστηρίζεται από Snap, macOS  και Windows,  δημιουργώντας τα πακέτα μέσα σε μια εικονική μηχανή (μέσω του εργαλείου Multipass)  για να διασφαλίσει ότι το τελικό αποτέλεσμα είναι πανομοιότυπο, ανεξάρτητα από το λειτουργικό σύστημα του προγραμματιστή.  

Το Snapcraft υποστηρίζει πολλά εργαλεία δημιουργίας και γλώσσες προγραμματισμού, όπως Go, Java, JavaScript, Python, C / C++ και Rust. Επιτρέπει επίσης την εισαγωγή μεταδεδομένων εφαρμογών από πολλαπλές πηγές, όπως AppStream, git, σενάρια shell και αρχεία `setup.py` . 

### Snap Store
Το Snap Store επιτρέπει στους προγραμματιστές να δημοσιεύουν τις εφαρμογές τους που είναι «πακεταρισμένες»  με snap.  Αν και ο κώδικας του πελάτη (client) είναι ανοιχτός, ο κώδικας του διακομιστή (backend) του Snap Store είναι ιδιόκτητο λογισμικό της Canonical. Παρότι οι εφαρμογές ελέγχονται αυτόματα για κακόβουλο κώδικα, έχουν υπάρξει περιστατικά παραβίασης, όπως τον Μάιο του 2018 (όταν εντοπίστηκε εφαρμογή με κρυμμένο εξορύκτη κρυπτονομισμάτων) και το 2024 (με ψεύτικα πορτοφόλια κρυπτονομισμάτων) . Για τον λόγο αυτό, συνιστάται στους χρήστες να εγκαθιστούν εφαρμογές μόνο από επαληθευμένους εκδότες. 

## Υποστήριξη και Λειτουργία
Τα Snaps είναι αυτοτελή πακέτα που λειτουργούν σε μια μεγάλη ποικιλία διανομών Linux. Αυτή η προσέγγιση διαφέρει από τα παραδοσιακά συστήματα διαχείρισης, τα οποία απαιτούν ειδικά προσαρμοσμένα πακέτα για κάθε διανομή ξεχωριστά. 
[μικρογραφία|Η  εντολών εδώ δείχνει ότι έχουν εγκατασταθεί [Skype|το Skype και το IntelliJ IDEA]]
Η μορφή ενός αρχείου snap είναι ουσιαστικά ένα ενιαίο, συμπιεσμένο σύστημα αρχείων που χρησιμοποιεί το πρότυπο SquashFS (με την επέκταση `.snap`). Το αρχείο αυτό περιέχει την ίδια την εφαρμογή, τις βιβλιοθήκες από τις οποίες εξαρτάται και δηλωτικά μεταδεδομένα (metadata). Αυτά τα μεταδεδομένα ερμηνεύονται από την υπηρεσία `snapd` στο παρασκήνιο, ώστε να δημιουργηθεί το κατάλληλα διαμορφωμένο και ασφαλές περιβάλλον απομόνωσης (sandbox) για την εκάστοτε εφαρμογή. Μετά την εγκατάσταση, το πακέτο προσαρτάται (mount) από το λειτουργικό σύστημα και αποσυμπιέζεται δυναμικά τη στιγμή που εκτελείται.  Αν και αυτή η μέθοδος έχει το πλεονέκτημα ότι εξοικονομεί αποθηκευτικό χώρο στο δίσκο, έχει το μειονέκτημα ότι ορισμένες μεγάλες εφαρμογές καθυστερούν αισθητά κατά την πρώτη τους εκκίνηση. 

Το σύστημα υποστηρίζει κάθε κατηγορία εφαρμογών Linux, όπως εφαρμογές επιφάνειας εργασίας (desktop), εργαλεία διακομιστή (server), εφαρμογές για το Διαδίκτυο των Πραγμάτων (IoT), ακόμη και υπηρεσίες συστήματος (όπως προγράμματα οδήγησης εκτυπωτών).  Για να διασφαλιστεί αυτή η πλήρης λειτουργικότητα, το Snap βασίζεται στο σύστημα εκκίνησης `[[systemd]]` για διεργασίες όπως η εκτέλεση υπηρεσιών μέσω υποδοχών (socket-activated services).  Ως αποτέλεσμα, το Snap λειτουργεί ιδανικά μόνο σε διανομές που έχουν υιοθετήσει το `systemd`. 

## Υιοθέτηση
[μικρογραφία|Στιγμιότυπο οθόνης του σεναρίου εγκατάστασης [Spotify|του Spotify -EasyRPM που εκτελείται στο openSUSE Tumbleweed. Το σενάριο κατέβασε το πακέτο Spotify Linux Snap από το snapcraft.io, το επεξεργάστηκε και μετέτρεψε σε RPM και εγκατέστησε το RPM στο σύστημα.]]
Αρχικά, το Snap υποστηριζόταν αποκλειστικά από τη διανομή Ubuntu Core. Ωστόσο, τον Ιούνιο του 2016, η υποστήριξή του επεκτάθηκε σε ένα ευρύ φάσμα διανομών Linux, με στόχο να καθιερωθεί ως μια καθολική μορφή πακέτων.  Επειδή απαιτεί το `[[systemd]]` (το οποίο βρίσκεται στις περισσότερες αλλά όχι σε όλες τις διανομές), άλλα συστήματα τύπου Unix, όπως το FreeBSD, δεν υποστηρίζονται.  Το ChromeOS δεν υποστηρίζει εγγενώς το Snap, παρά μόνο μέσω συμβατών διανομών Linux που εγκαθίστανται εντός του, όπως το Gallium OS. 

Το λειτουργικό σύστημα Ubuntu (καθώς και τα επίσημα παράγωγά του) προεγκαθιστά το Snap από προεπιλογή, όπως συμβαίνει και με άλλες διανομές που βασίζονται στο Ubuntu, για παράδειγμα το KDE Neon.  

Αρκετές μεγάλες εταιρείες ανάπτυξης λογισμικού δημοσιεύουν επίσημα τα προγράμματά τους στο Snap Store. Μεταξύ αυτών συγκαταλέγονται η Google,  η JetBrains,  το έργο KDE,  η Microsoft (με εφαρμογές όπως τα .NET Core 3.1,  Visual Studio Code και PowerShell), η Mozilla  και το Spotify.  Επιπλέον, τα Snaps χρησιμοποιούνται σε βιομηχανικά περιβάλλοντα (IoT) από καταναλωτικά προϊόντα  έως πύλες διαχείρισης εταιρικών συσκευών  και δίκτυα δορυφορικών επικοινωνιών.   Τέλος, το λογισμικό αξιοποιείται και από προγραμματιστές εφαρμογών διακομιστή, σε πακέτα όπως τα InfluxDB,  Kata Containers,  Nextcloud  και Travis CI. 

## Αποδοχή και Κριτική
Το σύστημα Snap έχει δεχθεί έντονη κριτική από τμήματα της κοινότητας του ελεύθερου λογισμικού. Ο Clément Lefèbvre, ιδρυτής και επικεφαλής του έργου Linux Mint, άσκησε δριμεία κριτική στην Canonical, υποστηρίζοντας ότι η εταιρεία προσπαθεί να ελέγξει απόλυτα τη διανομή λογισμικού, καθιστώντας το δικό της κατάστημα (Snap Store) υποχρεωτικό μονόδρομο για τους χρήστες. Ως απάντηση, το 2020 το έργο Linux Mint ανακοίνωσε ότι οι διανομές του δεν θα περιλαμβάνουν προεγκατεστημένο το `snapd` και μπλόκαρε την αυτόματη εγκατάστασή του μέσω του διαχειριστή πακέτων APT.  

Στις πιο πρόσφατες εκδόσεις του Ubuntu, η Canonical αποφάσισε να μεταφέρει ορισμένα εξαιρετικά δημοφιλή πακέτα αποκλειστικά σε μορφή Snap, καταργώντας τα παραδοσιακά πακέτα. Τα πιο χαρακτηριστικά παραδείγματα είναι τα προγράμματα περιήγησης ιστού Chromium και Firefox.  Η αναγκαστική αντικατάσταση του Firefox προκάλεσε ανάμεικτες έως αρνητικές αντιδράσεις από τους χρήστες, κυρίως λόγω αισθητών προβλημάτων στην απόδοση και πολύ αργής εκκίνησης (ειδικά κατά το πρώτο άνοιγμα της εφαρμογής).

Παράλληλα, λόγω του αυξημένου φόρτου συντήρησης του συστήματος ασφαλείας AppArmor (το οποίο είναι απαραίτητο για τον αυστηρό περιορισμό των Snaps), ορισμένες διανομές έχουν αρχίσει να απομακρύνονται. Το λειτουργικό σύστημα Solus σχεδιάζει την πλήρη κατάργηση του Snap, ***' ενώ το [[Zorin OS]] αφαίρεσε το Snap από τις προεπιλογές του στην έκδοση 17. ***' Επιπλέον, επίσημα παράγωγα του Ubuntu (όπως τα Kubuntu, Xubuntu και Ubuntu MATE), τα οποία συνήθιζαν να ενσωματώνουν και το ανταγωνιστικό σύστημα Flatpak ως εναλλακτική, αναγκάστηκαν από την Canonical να σταματήσουν να το προσφέρουν προεγκατεστημένο από την έκδοση 23.04 και έπειτα, απαιτώντας πλέον από τον χρήστη να το εγκαθιστά χειροκίνητα. ****

## Παραπομπές


## Εξωτερικοί σύνδεσμοι

* Επίσημος ιστότοπος
* Μια τεχνική σύγκριση μεταξύ snaps και debs

Κατηγορία:Ελεύθερο λογισμικό προγραμματισμένο σε Python
Κατηγορία:Ubuntu
Κατηγορία:Τεχνολογία λειτουργικών συστημάτων
Κατηγορία:Σελίδες με μη επιθεωρημένες μεταφράσεις