Snap
Snap היא מערכת אריזה ופריסה של חבילות תוכנה שפותחה על ידי קנוניקל עבור מערכות הפעלה המשתמשות בליבת לינוקס. החבילות, הנקראות snaps, והכלי לשימוש בהן, snapd, פועלות על פני מגוון הפצות לינוקס[1] ומאפשרות למפתחי תוכנה "במעלה הזרם" להפיץ את היישומים שלהם ישירות למשתמשים. Snaps הם יישומים עצמאיים הפועלים בארגז חול (סביבה מבודדת) עם גישה מתווכת למערכת המארחת. Snap יצא במקור עבור יישומי ענן[2] אך לאחר מכן הוסב לתמוך לעבוד גם במכשירי אינטרנט של הדברים[3][4]ואפליקציות שולחניות.[5][6]
פונקציונליות
חנות Snap
חנות Snap מאפשרת למפתחים לפרסם את האפליקציות שלהם ישירות למשתמשים.[7] עם גישות מסורתיות לניהול חבילות לינוקס כמו APT או YUM, היישומים נארזים ומופצים כחלק ממערכת ההפעלה. זה יוצר עיכוב בין פיתוח אפליקציות לפריסתו עבור משתמשי קצה.[8][9] לעומת זאת, מפתחי אפליקציות יכולים לפרסם את האפליקציות שלהם ב-Snap Store ולהעביר אותן ישירות למשתמשים ללא כל התערבות מצד מנהלי ההפצה.
כל האפליקציות המועלות ל-Snap Store עוברות בדיקה אוטומטית, כולל סריקת תוכנות זדוניות. עם זאת, אפליקציות Snap אינן זוכות לאותה רמת אימות כמו תוכנה בארכיוני אובונטו הרגילים. במקרה אחד במאי 2018, נמצאו שתי אפליקציות של אותו מפתח המכילות כורה מטבעות קריפטוגרפיים שרץ ברקע במהלך הפעלת האפליקציה. כאשר נמצאה בעיה זו, קנוניקל הסירה את האפליקציות מחנות ה-Snap והעבירה את הבעלות על ה-Snaps לצד שלישי מהימן אשר פרסם מחדש את ה-Snaps ללא נוכחות הכורה.[10][11][12] אף על פי שארגז החול של Snap מפחית את ההשפעה של אפליקציה זדונית, קנוניקל ממליצה למשתמשים להתקין Snaps רק מבעלי אתרים מהימנים על ידי המשתמש.[13][14]
מכיוון שחבילות ב-Snap Store מתוחזקות על ידי המפתחים עצמם, מנהלי ההפצה אינם יכולים להבטיח שהחבילות עומדות בתקני איכות ומתעדכנות בזמן. במקרה אחד, מיקרוסופט השאירה גרסה מיושנת של סקייפ בחנות Snapcraft במשך יותר משנה.[15]
חבילות לינוקס אוניברסליות
Snaps הם חבילות עצמאיות הפועלות על פני מגוון הפצות לינוקס. זה בניגוד לגישות ניהול חבילות לינוקס מסורתיות, הדורשות חבילות מותאמות במיוחד עבור כל הפצת לינוקס.[16][17]

פורמט קובץ ה-Snap הוא מערכת קבצים דחוסה אחת המשתמשת בפורמט SquashFS עם הסיומת .snap
. מערכת קבצים זו מכילה את היישום, ספריות שהוא תלוי בהן ומטא נתונים הצהרתיים. מטא נתונים אלה מתפרשים על ידי snapd כדי להגדיר ארגז חול מאובטח בצורה מתאימה עבור אותו יישום. לאחר ההתקנה, ה-Snap מותקן על ידי מערכת ההפעלה המארחת ופורש את הדחיסה תוך כדי שימוש בקבצים.[18][19] אף על פי שיש יתרון לזה ש-Snaps משתמש בפחות שטח דיסק, זה גם אומר שחלק מהיישומים הגדולים מתחילים לאט יותר.[20][21]
הבדל משמעותי בין Snap לפורמטי אריזה אוניברסליים אחרים של לינוקס כמו Flatpak הוא ש-Snap תומך בכל סוג של יישומי לינוקס כמו יישומי שולחן עבודה, כלי שרת, אפליקציות IoT ואפילו שירותי מערכת כמו ערימת מנהלי ההתקן של המדפסת.[7][22][23] כדי להבטיח זאת, Snap מסתמך על systemd עבור תכונות כגון הפעלת שירותי מערכת מופעלי socket ב-Snap. [24] זה גורם ל-Snap לעבוד בצורה הטובה ביותר רק בהפצות שיכולות לאמץ את מערכת ה-init הזו.[25]
ארגז חול ניתן להגדרה
אפליקציות ב-Snap פועלות בקונטיינר עם גישה מוגבלת למערכת המארחת. באמצעות ממשקים, משתמשים יכולים לתת לאפליקציה גישה בתיווך לתכונות נוספות של המארח כגון הקלטת אודיו, גישה להתקני USB והקלטת וידאו.[26][27][28] ממשקים אלו מתווכים ממשקי API רגילים של לינוקס כך שיישומים יכולים לתפקד בארגז החול מבלי צורך לשכתב. יישומי שולחן עבודה יכולים גם להשתמש ב-XDG Desktop Portals, API סטנדרטי שנוצר במקור על ידי פרויקט Flatpak כדי לתת ליישומי שולחן עבודה עם ארגז חול גישה למשאבי מארח.[29][30] פורטלים אלו מספקים לעיתים קרובות חווית משתמש טובה יותר בהשוואה לממשקי ה-API המקוריים של לינוקס מכיוון שהם מבקשים מהמשתמש רשות למשאבים כגון מצלמת אינטרנט בזמן שהאפליקציה משתמשת בהם. החיסרון הוא שצריך לשכתב יישומים וערכות כלים כדי להשתמש בממשקי ה-API החדשים.
ארגז החול Snap תומך גם בשיתוף נתונים ושקעי Unix בין Snaps.[31] זה משמש לעיתים קרובות כדי לשתף ספריות נפוצות ומסגרות יישומים בין Snaps כדי להקטין את גודל ה-Snaps על ידי מניעת כפילות.[32][33]
ארגז חול Snap מסתמך במידה רבה על AppArmor מודול אבטחת לינוקס מהקרנל. מכיוון שרק מודול אבטחת לינוקס "עיקרי" (major) אחד (LSM) יכול להיות פעיל בו-זמנית,[34] ארגז החול של Snap הוא הרבה פחות מאובטח כאשר LSM מרכזי אחר מופעל. כתוצאה מכך, בהפצות כגון פדורה המאפשרות SELinux כברירת מחדל, ארגז החול Snap מוחלש מאוד. אף על פי שקנוניקל עובדת עם מפתחים וחברות רבות אחרות כדי לאפשר למספר LSMs לפעול בו-זמנית, הפתרון הזה עדיין רחוק.[35][34][36]
ארגז החול של Snap מונע מיישומי שולחן עבודה מנותקים לגשת לחלקים של מערכת ההפעלה המארחת כדי למנוע בעיות תאימות. כדי ש-Snaps ישתמשו בערכת נושא (theme), זה גם צריך להיות ארוז ב-Snap נפרד. ערכות נושא פופולריות רבות נארזות על ידי מפתחי Snap[37] אך ערכות נושא מסוימות אינן נתמכות עדיין[38] ויש להתקין ערכות נושא לא שכיחות באופן ידני. אם ערכת נושא אינה זמינה כחבילת Snap, המשתמשים צריכים לפנות לבחירת ערכת הנושא התואמת ביותר הקיימת.[39] העבודה נמשכת כדי להקל על צדדים שלישיים לארוז ערכות נושא ב-Snap ולהתקין אוטומטית ערכות נושא לא שכיחות של המערכת.[40]
עדכונים אוטומטיים ואטומיים
מספר פעמים ביום, snapd בודק אם קיימים עדכונים זמינים של כל ה-Snaps ומתקין אותם ברקע באמצעות פעולה אטומית. ניתן לבטל עדכונים[41][42] ולהשתמש בקידוד דלתא כדי להקטין את גודל ההורדה שלהם.[43][44][45]
בעלי אתרים יכולים להוציא ולעדכן גרסאות מרובות של התוכנה שלהם במקביל באמצעות ערוצים. לכל ערוץ יש מסלול וסיכון ספציפיים, המציינים את הגרסה והיציבות של התוכנה שפורסמה בערוץ זה. בעת התקנת אפליקציה, Snap משתמש כברירת מחדל latest/stable
, אשר יתעדכן אוטומטית למהדורות עיקריות חדשות של התוכנה כאשר הן יהיו זמינות. מפרסמים יכולים ליצור ערוצים נוספים כדי לתת למשתמשים את האפשרות לדבוק במהדורות מרכזיות ספציפיות של התוכנה שלהם. לדוגמה, 2.0/stable
יאפשר למשתמשים לדבוק בגרסת 2.0 של התוכנה ולקבל עדכונים קלים בלבד ללא סיכון של שינויים לא תואמים לאחור. כאשר המוציא לאור מוציא גרסה מרכזית חדשה בערוץ חדש, משתמשים יכולים לעדכן ידנית לגרסה הבאה כאשר הם בוחרים.[46][47][48][19]
ניתן לבטל עדכונים אוטומטיים באמצעות "פריצות" מסוימות,[49] וכן ישנן דרכים רבות להגדיר עדכונים כך שיתאימו לצרכים מסוימים. המשתמש יכול לבחור להישאר בגרסה עיקרית ספציפית של התוכנה על ידי ציון הערוץ, הם יכולים להגדיר את מרווח העדכון כדי שיהיה לו זמן לבדוק עדכונים באופן ידני, לדוגמה פקודה זו תבדוק עדכון ביום שישי האחרון מ-23:00 עד 01:00<syntaxhighlight lang="text"> sudo snap set system refresh.timer=fri5,23:00-01:00 </syntaxhighlight>והם יכולים להחזיק עדכונים עד 60 יום. בנוסף, עדכונים מושבתים אוטומטית גם בחיבורים מדורגים.[50][51] אפילו עם הפקדים הללו, מספר משתמשים הביעו את תלונותיהם על היעדר אפשרות לכבות עדכונים אוטומטיים לחלוטין.[52]
אימוץ
Snap תמך בתחילה רק בהפצת ה-all-Snap Ubuntu Core, אך ביוני 2016, היא הועברה למגוון רחב של הפצות לינוקס כדי להפוך לפורמט של חבילות לינוקס אוניברסליות.[53] Snap דורש פונקציונליות (systemd) הזמינה ברוב ההפצות של לינוקס, אך לא בכולן, לכמה מערכות דמויות יוניקס אחרות אין (למשל FreeBSD). מערכת ההפעלה של Chrome אינה תומכת ב-Snap באופן ישיר, רק באמצעות הפצות לינוקס המותקנות בה התומכות ב-Snap, כגון Gallium OS.[54]
מספר הפצות לינוקס תומכות ב-Snap out of the box כמו אובונטו (ולמשל Kubuntu, Xubuntu),[55] Manjaro, Zorin OS, [56]KDE Neon,[57] Solus[58] ו-Li-fe. כמן כן [59] Snap זמין להפצות רבות אחרות כגון CentOS, דביאן, Elementary OS, פדורה, GalliumOS, Kali Linux, לינוקס מינט, OpenEmbedded, Parrot Security, Pop! OS, Raspbian, Red Hat Enterprise Linux ו-openSUSE.[60]
מספר חברות בולטות לפיתוח תוכנת שולחן עבודה מפרסמות את התוכנה שלהן ב-Snap Store, כוללGoogle, [61] JetBrains, [62] KDE, [63] Microsoft (עבור גרסאות לינוקס של למשל. NET Core 3.1, [64] Visual Studio Code, Skype,[65] ו-PowerShell), Mozilla[66] ו-Spotify. [67] Snaps משמשים גם בסביבות של Internet of Things, החל ממוצרים הפונים לצרכן[68] ועד לשערי ניהול מכשירים ארגוניים[69] ורשתות תקשורת לווייניות.[70][71] לבסוף, Snap משמש גם מפתחים של יישומי שרת כגון InfluxDB, [72]Kata Containers, [73]Nextcloud[74] ו-Travis CI.[75]
בשנת 2019, קנוניקל החליטה להחליף את דפדפן האינטרנט Chromium במהדורות עתידיות של אובונטו מחבילת APT ל-Snap. הם הסבירו ש-Snap הקל הרבה יותר על התמיכה ב-Chromium בכל מהדורות אובונטו הנתמכות. זה איפשר להם למקד משאבי הנדסה בחלקים אחרים של שולחן העבודה של אובונטו.[76][7] כתוצאה מהחלטה זו, נגזרות של אובונטו כגון לינוקס מינט נאלצו לבחור בין שמירה על גרסה משלהן של חבילת Chromium או מעבר לגרסת ה-Snapped של Chromium המתוחזקת על ידי קנוניקל.
קבלה
כמה חברות שיבחו את Snap. כאשר[77] Heroku אמרה שהעדכון האוטומטי של Snap מתאים היטב ללוח הזמנים של ההוצאה לאור המהיר שלהם, מיקרוסופט ציינה את קלות השימוש שלו ואת היותו מבוסס yaml, כמו גם שהוא אגנוסטי להפצה, ו-JetBrains אמרה ש-Snap Store נותן לכלים שלהם חשיפה רבה יותר.
עובד רד האט אדם ויליאמסון, אף על פי שהכיר בהטיה של עצמו, ביקר את Snap על כך ששומר על קוד סגור בצד השרת,[78] שאין לו מנגנון לשימוש בשרתים של צד שלישי,[79] ועליו לחתום על הסכם רישיון תורם כדי לתרום לפיתוח שלה.[80]
Clement Lefebvre (מייסד Linux Mint ומוביל פרויקטים[81][82]) כתב ש-Snap מוטה ויש לו ניגוד עניינים. הסיבות שהוא ציין כוללות את זה שהוא נשלט על ידי קנוניקל ונעול לחנות שלהם, וגם ש-Snap עובד טוב יותר באובונטו מאשר בהפצות אחרות.[83] מאוחר יותר הוא הודיע כי התקנת Snap תיחסם,[84] אף על פי שתתועד דרך להשבית מגבלה זו.[85]
קישורים חיצוניים
הערות שוליים
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ 1 2 3 בתהליכי בנייה "תבנית:Cite web"
- ^ Upgrading packaged Ubuntu application unreasonably involves upgrading entire OS Bug #578045 on bugs.launchpad.net/ubuntu by John King (2010-05-10)
- ^ Linus Torvalds on the problems of distro packaging Linus Torvalds on DebConf 2014
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ 1 2 בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ 1 2 בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite news"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite news"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite news"