חוצה-פלטפורמות

במחשבים, תוכנה או יישום חוצה-פלטפורמות (באנגלית: cross-platform או multi-platform), הוא יישום אשר מוּמש עבור פלטפורמות מחשוב שונות, ויכול לפעול על גבי פלטפורמות שונות. דוגמה ליישום חוצה-פלטפורמות יכול להיות יישום שניתן להריץ אותו על פלטפורמת Microsoft Windows על גבי ארכיטקטורת x86, וגם על לינוקס על ארכיטקטורת x86, וגם על Mac OS X על גבי מערכות מקינטוש של אפל, מבוססות PowerPC או x86. על מנת להחשב לחוצה-פלטפורמות, על היישום להיות מסוגל לרוץ לפחות על גבי שתי פלטפורמות שונות. ניתן לחלק תוכנות חוצות-פלטפורמות לשני סוגים; תוכנות מהסוג הראשון דורשות בנייה או הידור פרטני עבור כל סוג של פלטפורמה נתמכת, ואילו הסוג השני של תוכנות ניתן להרצה ישירה על גבי כל פלטפורמה מבלי הצורך בהכנות מיוחדות כלשהן. דוגמאות לתוכנות מהסוג השני הן תוכנות שנכתבות בשפה מפורשת (interpreted language), או תוכנות אשר עוברות הידור מקדים ל-bytecode יביל (ניתן להעברה בין פלטפורמות), אשר המפרשים או חבילות ההרצה (run-time packages) עבורם הם רכיבים סטנדרטיים בכל הפלטפורמות. פלטפורמה היא השילוב בין חומרה לתוכנה, אשר משמשים להרצת יישומי מחשב. ניתן לתאר פלטפורמה פשוט כמערכת ההפעלה או כארכיטקטורת המחשב, או שהיא יכולה להיות השילוב של שניהם. כנראה שהפלטפורמה המוכרת ביותר היא Microsoft Windows אשר רצה על גבי ארכיטקטורת x86. פלטפורמות אחרות מוכרות היטב של מחשבים אישיים כוללות את Unix/לינוקס ואת Mac OS X (שתי הפלטפורמות האלה הן בעצמן חוצות-פלטפורמות). גם מכשירים רבים כגון טלפונים סלולריים מהווים פלטפורמות מחשוב. ניתן לכתוב יישומי מחשב כך שיהיו תלויים במאפיינים של פלטפורמה מסוימת – החומרה, מערכת ההפעלה, או המכונה הווירטואלית שהם רצים עליה. הפלטפורמה של Java היא פלטפורמה המבוססת על מכונה וירטואלית, אשר יודעת לרוץ על גבי סוגים רבים של מערכות הפעלה וחומרה, ומהווה פלטפורמה פופולרית לכתיבת תוכנה עבורה. המושג פלטפורמת חומרה יכול להתייחס לארכיטקטורת המחשב או לארכיטקטורת המעבד. לדוגמה, מעבדים מסוג x86 ו-x86-64 מהווים את אחת מארכיטקטורות המחשב הנפוצות ביותר בשימוש במחשבים שולחניים ובמחשבים ניידים המיועדים לשימוש כללי. לרוב, מחשבים מסוג זה מריצים את אחת מהגרסאות של Microsoft Windows, אם כי הם יכולים להריץ גם מערכות הפעלה אחרות, כגון לינוקס, OpenBSD, NetBSD, Mac OS X ו-FreeBSD. ארכיטקטורת ARM נפוצה בטלפונים חכמים ובמחשבי לוח אשר מריצים את מערכות ההפעלה אנדרואיד ו-iOS ומערכות הפעלה אחרות למכשירים ניידים. פלטפורמת תוכנה יכולה להיות מערכת הפעלה או סביבת תכנות, אבל נפוץ יותר הוא השילוב בין השתיים. הפלטפורמה של ג'אווה ראויה לציון כמקרה יוצא מן הכלל לכך, מכיוון שהיא משתמשת במכונה וירטואלית לצורך הרצת הקוד שעבר הידור (Java bytecode), ובכך הופכת את הקוד לבלתי תלוי במערכת ההפעלה. דוגמאות לפלטפורמות תוכנה: אנדרואיד - מערכת הפעלה לטלפונים חכמים ולמחשבי לוח. BSD, מערכת הפעלה חוצת פלטפורמות (ראו FreeBSD לדוגמה). פלטפורמת התוכנה של Java לינוקס, על גבי ארכיטקטורות PowerPC, x86 ,x86-64 ואחרות. Mac OS X, על גבי ארכיטקטורות PowerPC, x86, x86-64. Microsoft Windows, על גבי ארכיטקטורות x86 ו-x86-64. MS-DOS ומערכות תואמות אחרות כגון DR-DOS ו-FreeDOS, על גבי ארכיטקטורת x86. OS/2, eComStation. Solaris, על גבי ארכיטקטורות SPARC, x86 ,x86-64. Common Language Infrastructure - ידועה יותר בשמות המימושים השונים שלה: פלטפורמת ה-NET. של מיקרוסופט, ו-Mono של נובל. ערך מורחב – Java (פלטפורמת תוכנה) כפי שנאמר קודם, הפלטפורמה של ג'אווה מהווה חריגה מהכלל שאומר שמערכת ההפעלה היא פלטפורמת התוכנה. ג'אווה משתמשת במכונה וירטואלית ("מעבד וירטואלי"), אשר מריצה את כל הקוד שנכתב בשפת Java. זה מאפשר לאותו קובץ הרצה בינארי לרוץ על גבי כל המערכות שתומכות בג'אווה, באמצעות השימוש במכונה הווירטואלית של ג'אווה (JVM). קובצי ההרצה של ג'אווה אינם מבוצעים ישירות (natively) על גבי מערכת ההפעלה. זאת אומרת שגם Windows וגם לינוקס לא מריצות תוכניות ג'אווה באופן ישיר, ובמקום זאת התוכניות מורצות על ידי ה-JVM, אשר רצה על גבי מערכת ההפעלה. למרות העובדה שקוד Java אינו רץ natively - כמו קוד שעבר הידור לשפת מכונה ורץ ישירות על גבי מערכת ההפעלה (כמו קוד בשפת ++C לדוגמה), ל-JVM יש יכולת מלאה לספק את השירותים שבדרך כלל מספקת מערכת ההפעלה, כגון קריאה וכתיבה לדיסק וגישה לרשת, וזאת בתנאי שניתנו ההרשאות המתאימות. ה-JVM מאפשרת למשתמש לקבוע את רמת האבטחה המתאימה, אשר תלויה ב-Access control list. לדוגמה, גישה לדיסק ולרשת ניתנת בדרך כלל רק ליישומים "שולחניים" רגילים, אבל אינה ניתנת ל-Applets מבוססי דפדפן. פלטפורמת ה-Java Native Interface גם יכולה לשמש כדי לאפשר גישה לפונקציות ספציפיות למערכת ההפעלה. כיום ניתן להריץ תוכניות ג'אווה על גבי מערכות ההפעלה Microsoft Windows, Mac OS X, לינוקס ו-Solaris. עבור יישומים למכשירים ניידים, משתמשים בתוספים לדפדפנים במכשירים מבוססי Windows ו-Mac, ומערכת ההפעלה אנדרואיד כוללת תמיכה מובנית ב-Java. כדי שתוכנה תיחשב חוצה-פלטפורמות, עליה להיות מסוגלת לפעול על גבי יותר מארכיטקטורת מחשב או מערכת הפעלה אחת. פיתוח תוכנה כזאת עשוי להיות מורכב ולארוך זמן רב מכיוון שלמערכות הפעלה שונות יש ממשקי תכנות יישומים (APIs) שונים (לדוגמה, לינוקס משתמשת ב-API שונה מזה של Windows). העובדה שמערכת הפעלה מסוימת יכולה לרוץ על גבי ארכיטקטורות מחשב שונות, לא אומרת שתוכנה שנכתבה עבור אותה מערכת הפעלה בהכרח תוכל לעבוד על כל הארכיטקטורות שמערכת ההפעלה תומכת בהן. דוגמה לכך היא ערכת היישומים OpenOffice.org, שבגרסה שלה משנת 2006 לא יכלה לרוץ על גבי מעבדי AMD64 או Intel 64 (ארכיטקטורת x86-64); בעיה זו טופלה מאז, ומרבית ערכת היישומים של OpenOffice.org עברה porting למערכות 64 ביט האלה. זה גם מעיד על כך שהעובדה שתוכנה נכתבה בשפת תכנות פופולרית כגון C או ++C, זה עדיין לא אומר שהיא תוכל לרוץ על גבי כל מערכות ההפעלה שתומכות בשפת התכנות הזאת, או אפילו על גבי אותה מערכת ההפעלה על גבי ארכיטקטורה שונה. ערך מורחב – יישום רשת בדרך כלל מתייחסים ליישומי רשת כאל יישומים חוצי פלטפורמות, כיוון שבאופן אידיאלי הם נגישים מכל אחד ממגוון הדפדפנים הזמינים במערכות הפעלה שונות. יישומים כאלה בדרך כלל משתמשים בארכיטקטורת שרת-לקוח, והם משתנים מאוד מבחינת המורכבות והפונקציונליות שלהם. Java (פלטפורמת תוכנה) יישום רשת אפליקציית מובייל וירטואליזציה מדיה וקבצים בנושא חוצה-פלטפורמות בוויקישיתוף