פרסומת
בדיוק הורדת עדכון ארוז תכונות ליישום הקוד הפתוח המועדף עליך. הכל עובד טוב, ואתה משתמש בו במכשירים האחרים שלך - אז הגיע הזמן לפרוס אותו גם לאלה.
פרט למחשב הנייד החדש שלך המבריק של לינוקס אינו תואם לחבילת ההתקנה של Windows. מה דעתך על טאבלט ה- Android שלך? אייפון? PS4? מדוע אינך יכול פשוט לקחת את פיסת התוכנה הזו ולהשתמש בה בכל מקום שתרצה? בואו ונבחן כמה חסמים שונים לחלום של "לקנות פעם אחת, לרוץ לכל מקום".
פיתוח תוכנה ואדריכלות מערכת הפעלה
ההבנה מדוע תוכנה לא עובדת על פני מערכות הפעלה דורשת מעט ידע (רק מעט, אני מבטיח) כיצד מייצרת תוכנה.
תהליך פיתוח התוכנה
בזרימת פיתוח תוכנה בסיסית מאוד למחשבים שולחניים, שרתים וניידים (כלומר לא באינטרנט תכנות מול פיתוח אתרים: מה ההבדל?אתם עשויים לחשוב שמתכנתים ומפתחי אתרים מבצעים את אותה העבודה, אבל זה רחוק מהאמת. להלן ההבדלים העיקריים בין מתכנתים למפתחי אתרים. קרא עוד ), מתכנת יהיה:
- הקלד כמה קוד לקובץ אחד או יותר.
- לקמפל את הקוד למשהו שהמחשב יכול לבצע.
- מבחן כדי לוודא שהתוכנית עובדת כמצופה.
- חבילה והפצה / פריסה התוכנה.
זה שילוב של הצעד הראשון והשני שמעסיק אותנו כאן. התהליך של
הידור תוכנה, או הפיכתו מקוד לאלה ואפסים שהמחשב מבין (שפת מכונה) היא מורכבת. לא ניכנס לזה לפרטי פרטים, אך כדאי להבין ברמה גבוהה מה קורה.אדריכלות מערכת ההפעלה
נקודה אחת שחשוב להבין היא שמערכת הפעלה איננה ישות אחת. במקום זאת, זה מורכב משכבות של תוכנה.
גרעיני מערכת הפעלה
מערכת הפעלה גרעין אחראי לתקשורת עם חומרת המחשב. תוכנה מעבירה את הפקודות שלה לגרעין, אשר בתורו מנפק פקודות לחומרה כדי (למשל) לקרוא קובץ מהדיסק הקשיח, או לצייר חלון על המסך. זה בעצם מתאם את כל המידע (בין אם מדובר באחסון נתונים, חישובים או קלט משתמש) בין חומרה לפיסות תוכנה שונות. הגרעין מנגיש את כל הפונקציונליות הזו לתוכנה באמצעות מערכת שיחות.
גרעין של כל מערכת הפעלה יבצע שיחות מערכת באופן שונה, מבחינת מהן ישנן, איך קוראים להן, או אילו אפשרויות הן נוקטות. כתוצאה מכך, התוכנה צריכה לקחת בחשבון את שיחות המערכת הנתמכות על ידי הגלעין של כל מערכת הפעלה אליה היא מכוונת. לשיחת המערכת בה אתה משתמש כדי לשלוח נתונים ל- GPU בלינוקס עשוי להיות שם אחר, רשימת מידע שאתה צריך לספק, או שניהם ב- Windows. ייתכן שהשיחה המדויקת הזו בכלל לא תהיה שם.
ספריות מערכת
במקרים רבים התוכנה אינה מתקשרת ישירות לגרעין. במקום זאת, זה מתקשר ספריות מערכת, או אוספים של פונקציות בסיסיות. ספריות קיימות כך (למשל) כל תוכנית ושומרת קבצים בכונן הקשיח אינה צריכה לכתוב פונקציה כדי לעשות זאת. במקום זאת, זה פשוט קישורים אל ספריית מערכות ומשתמש בפונקציה קיימת. ספריית GLibC עבור לינוקס היא דוגמא עיקרית, כמו גם קבצי ה- DLL בממשק ה- API של Win32 או התוכן של ספריית Mac / System / Library של Mac כיצד לגשת לתיקיית ספריית OS X ומדוע זה שימושירוב התיקיות של ספריית OS X הכי טובות להישאר לבדן, אך כדאי לדעת את דרכך בספריה המשתמש. קרא עוד .
ספריות מערכת פועלות כסוג של מתרגם בין יישומים לגרעין למשימות שגרתיות. יישומים מבצעים פונקציות שיחות לספריות אלה, העוסקות בהרבה פרטים נמוכים. הם עשויים גם לבצע שיחות מערכת לגרעין מטעמי נוחות. כפי שאפשר לנחש, פירוש הדבר שהספריות הללו נכתבות עבור גרעין מסוים, ולכן לא ניתן להשתמש בהן במערכות הפעלה עם גרעינים שונים.
כותרות ביצוע של מערכת הפעלה
החסימה האחרונה לתוכנה אוניברסלית היא פורמט קבצי הפעלה עבור מערכות ההפעלה. מערכת הפעלה מצפה שהקבצים שהיא מפעילה תעקוב אחר מסוים פורמט קובץ בינארי כל מה שאתה צריך לדעת על פורמטים של קבצים ועל המאפיינים שלהםאנו משתמשים בקובץ המילים להחלפה: מוסיקה, תמונה, גיליון אלקטרוני, מצגת שקופיות וכן הלאה. אבל מה בכל זאת הופך קובץ ל"קובץ "? בואו ננסה להבין את החלק הבסיסי הזה במחשוב. קרא עוד . לדוגמה, קבצי ההפעלה וניתנים קישוריים (ELF) הפועלים במערכות הפעלה כגון על Linux ו- FreeBSD לציין מאפיינים מסוימים של הקובץ בתים מסוימים, כמוצג להלן תמונה.
ה ממשק בינארי ליישום (ABI) חשיבות מיוחדת המוצגת כמי שמוצגת. שילוב של שיחות הזמינות ממעבדי, גרעין וספריות מערכת, ABI דומה א ממשק תכנות יישומים (API) בכך שהוא מגדיר כיצד שתי תוכניות מתקשרות זו עם זו. אבל ממשק ה- API הוא דבר שמשמש מתכנתים (בני אדם) בקוד המקור כדי להצביע על שתי פיסות תוכנה צריך לדבר אחד עם השני. ABI הוא מה שמאפשר להם לעשות זאת ברגע שהתוכנה מורכבת ומופעלת. כל מערכת הפעלה מיישמת ABI מסוים, העשוי או לא יכול לשנות בין גרסאות של אותה מערכת הפעלה.
באופן כללי, מערכות הפעלה מיישמות ABI משלהן, שנקבע על ידי שילוב של סוג המעבד, הגרעין וספריות מערכת סטנדרטיות. אבל לפעמים מערכת הפעלה תיישם יותר מאחד. ל- FreeBSD יש תמיכה בבינארות לינוקס, למשל מכיוון שהיא מספקת ABI לינוקס כתוסף לגרעין FreeBSD (במקום גרעין לינוקס). זה שונה מ תוכניות מהי מכונה וירטואלית? כל מה שצריך לדעתמכונות וירטואליות מאפשרות לך להפעיל מערכות הפעלה אחרות במחשב הנוכחי שלך. הנה מה שכדאי לדעת עליהם. קרא עוד כמו VMWare או VirtualBox שמשתמשים בתוכנה כדי לדמות מכונה שלמה (חומרה והכל). כתוצאה מכך תאימות מסוג ABI מהירה יותר, אך הרבה יותר מאמץ לשמור. זו הסיבה שזה נדיר, אם כי לאחרונה הערכה מיקרוסופט את הערך אובונטו זמינה כעת בחנות WindowsWindows Insiders יכולים כעת להוריד ולהתקין את אובונטו על Windows 10. זה מפגיש בין לינוקס וחלונות באיחוד לא קדוש שמעטים דמיינו שהם יחיו מספיק זמן כדי להיות עד. קרא עוד עושה זאת.
חריג: תוכנה מפורשת
בהתבסס על האמור לעיל, למדנו שמפתחים כותבים תוכנה עבור סוג יעד אחד ויחיד, של מערכת יעד. למעט כשהם לא עושים זאת. יש יישומים רבים שאתה יכול להוריד ולהריץ ב- Mac, ואז להעתיק ולהפעיל במערכת Windows, ואולי אפילו להעתיק שוב ולהפעיל על לינוקס ללא בעיות. איך זה אפשרי?
האם שכבתי עד עכשיו?
כפי שמתברר, יש קטגוריה של תוכנה שנראית על פני השטח כאילו היא פשוט "פועלת לכל מקום". אתה יכול להוריד ולהפעיל אותו על כל אחד פלטפורמה נתמכת - מילת המפתח היא "נתמכת." למעשה, אתה מוריד את קוד המקור ליישום, בעוד יישום אחר (ה מתורגמן) הוא סוג של הפעלת קוד המקור ישירות בזמן אמת. זה משהו שמפשט יתר על המידה, אז בואו נראה כיצד בדיוק זה עובד עם שפות זוגיות.
ג'אווה
כשג'אווה שוחררה לראשונה, ההבטחה הייתה (תרתי משמע) "לכתוב פעם אחת, לרוץ לכל מקום". הרעיון היה ליצור יישומים על ידי שימוש בפונקציות Java לשמירת קבצים, ביצוע חישובים או יצירת יישום חלון. ואז א Enviornment Java Runtime (JRE) עבור כל פלטפורמת מחשב נתמכת תריץ את הקוד ותתרגם אותם לפונקציות מערכת הפעלה מקוריות. הטריק לג'אווה, אם כן, הוא שהוא לא פועל "ישירות" במערכת ההפעלה. זה פועל בחלק של JRE שנקרא ה מכונה וירטואלית של ג'אווה וזה מה שמופעל במערכת ההפעלה.
על ידי הכנסת שכבת תוכנה נוספת זו בין היישום למערכת ההפעלה, Java מאפשרת לך להתמקד בקבוצת פונקציות זהה בכל מערכות ההפעלה. אתה אומר ל- Java מה אתה רוצה לעשות, ולתת ל- JVM למערכת שלך לדאוג כיצד לעשות זאת בפועל. התמונה למטה מציגה זאת בפעולה, היכן מסגרת היישומים השולחניים של Java של תוכנת JIDE מציג את אותה היישום עבור Mac (למעלה), Windows (אמצע שמאל), "Java טהור" (אמצע ימין) ולינוקס (למטה).
תוכניות ג'אווה אינן "אוסרות" את עצמן בדיוק בזמן אמת. במקום זאת, המהדר של ג'אווה יעבור אותם ל"קוד תצורה ". אתה יכול לחשוב על קוד-בייט כאל תוכנית אפויה למחצה. כאשר היזם משחרר את היישום הוא נערך ככל יכול להיות בלי לדעת באיזה מערכת הפעלה הוא הולך להפעיל. כאשר אתה משיק אותו בפועל, ה- JVM "יאפה אותו עד סוף הדרך" כך שיתאים לפונקציות המסוימות של מערכת ההפעלה המארחת.
פייתון
שפה מפורשת פופולרית היא פייתון 5 סיבות מדוע תכנות פייתון אינן מועילותפייתון - אתה אוהב את זה או שאתה שונא אותו. אתה יכול אפילו להתנדנד מקצה לקצה כמו מטוטלת. בלי קשר, פייתון היא שפה שקשה להיות אמביוולנטיים בה. קרא עוד . כשאתה מפעיל סקריפט של פייתון, המתורגמן לפייתון יתרגם קוד להוראות למערכת ההפעלה. זה יכול גם לתפקד באופן דומה לג'אווה: כשאתה "מייבא" קוד מחוץ ליישום שלך הוא מורכב לקוד קידוד בפעם הראשונה שהוא מופעל. ואז המתורגמן יידע אם, בהפעלות שלאחר מכן, הקוד המקורי השתנה, ובשלב זה יחבר אותו מחדש לקוד בייט חדש.
תוצר לוואי מגניב של הפעלת "על פי דרישה" זו הוא שתוכל להשתמש במתורגמן כדי לפתח את התסריטים באופן אינטראקטיבי. פשוט על ידי הקלדת "פיתון" בשורת הפקודה, תפעיל את המתורגמן ותוכל להריץ קוד ולראות את התוצאות באופן מיידי.
משמעות הדבר היא שמפתחים יכולים לשחק ולהגדיל דברים "בשידור חי". ואז, ברגע ששורת קוד עושה את מבוקשם, העתק והדבק אותו פנימה קובץ סקריפט (שהוא יעיל בהרבה ממעגל "עריכת קוד-מבחן" שעליו מתכנתים בשפה שאינה מתורגמת).
אפילו כאשר התוכנה זהה, זה כנראה לא
לרוע המזל עבור המשתמשים, תעשיית הטכנולוגיה לא פיתחה פורמט "אוניברסאלי" באמת. וייתכן שהיא לעולם לא תעשה זאת. הצגת תקנים מסוג זה גורמת לרוב לפיתרון "מכנה משותף פחות", עם ויתורים לטובת אישור כולם.
מה אתה חושב? האם אתה מעדיף שיהיה לך תוכנה תואמת אוניברסלית, גם אם פירוש הדבר שהיא לא כל כך טובה? או שאתה בסדר עם מערכת ההפעלה בה אתה משתמש, ואין לך שום עניין באפליקציות מפלטפורמות אחרות? ספר לנו להלן בתגובות!
נקודות זכות: Masterchief_Productions / Shutterstock
אהרון התמודד עם מרפקו בטכנולוגיה כאנליסט עסקי ומנהל פרויקטים מזה חמש עשרה שנים, והיה משתמש אובונטו נאמן כמעט זמן רב (מאז הגירית הבריטית). תחומי העניין שלו כוללים קוד פתוח, אפליקציות לעסקים קטנים, אינטגרציה של לינוקס ואנדרואיד ומחשוב במצב טקסט רגיל.