Η ψευδαίσθηση της απομόνωσης
Σε αντίθεση με τις εικονικές μηχανές (VMs), τα containers δεν αποτελούν ξεχωριστά λειτουργικά συστήματα. Είναι απλώς διεργασίες (processes) που εκτελούνται απευθείας στον host kernel, περιορισμένες από ένα σύνολο τεχνολογιών του Linux. Η απομόνωση επιτυγχάνεται μέσω των namespaces (για την ορατότητα πόρων) και των cgroups (για τον έλεγχο της κατανάλωσης πόρων), ενώ το filesystem απομονώνεται μέσω της αλλαγής του ριζικού καταλόγου (chroot/pivot_root).
Προκλήσεις της Go στο low-level runtime
Η επιλογή της Go για το runc εισάγει σημαντικές αρχιτεκτονικές προκλήσεις. Το runtime της Go είναι εγγενώς πολυνηματικό (multi-threaded), γεγονός που καθιστά προβληματική την εκτέλεση συγκεκριμένων syscalls που απαιτούν single-threaded περιβάλλον. Για να παρακαμφθεί αυτό, το runc χρησιμοποιεί εξειδικευμένα C modules που εκτελούνται πριν από την προετοιμασία του Go runtime.
Επιπλέον, η απουσία υποστήριξης για την κλήση fork() στην Go αναγκάζει τους δημιουργούς του runtime να καταφεύγουν σε λύσεις όπως το exec του /proc/self/exe. Αυτή η προσέγγιση προσομοιώνει τη δημιουργία child process, επιτρέποντας στο runtime να εφαρμόσει τους απαραίτητους περιορισμούς πριν από την εκτέλεση της τελικής διεργασίας.
Το ζήτημα των προνομίων και του networking
Η απαίτηση για root δικαιώματα αποτελεί διαχρονικό σημείο συμφόρησης (bottleneck) στην ασφάλεια των containers. Παρόλο που το rootless mode έχει σημειώσει πρόοδο, η υλοποίηση του networking παραμένει μια σύνθετη πρόκληση. Η ανάγκη για αναπαραγωγή ολόκληρης της στοίβας δικτύωσης στο userspace για λόγους ασφαλείας αναδεικνύει το πόσο βαθιά είναι η διασύνδεση του Docker με τα προνόμια του υπερχρήστη.