מכונה וירטואלית (תוכנה שיוצרת סביבה מדומה) היא תוכנה שיוצרת סביבת ריצה הדרושה לתוכנה אחרת. הסביבה המדומה מחקה מחשב פיזי, וכך התוכנה לא תלויה בחומרה מסוימת.
במחשב אישי מכונה וירטואלית מאפשרת להריץ כמה מערכות הפעלה על אותו מחשב, אף בו־זמנית. כך אפשר להריץ לינוקס בתוך חלונות, או להפעיל תוכנה שדורשת מערכת אחרת. המכונה הווירטואלית מתפקדת כחלון המדמה מחשב נפרד.
החלופות הן להתקין כמה מערכות על המחשב ולקבוע את האתחול מחדש בכל פעם, להחליף חומרה ותוכנה או לקנות מחשב נוסף. כל אלה מסורבלים או יקרים. מכונה וירטואלית חוסכת זמן וכסף, ומקלה ניסוי וטעייה. מכיוון שמכונה וירטואלית נשמרת בקובץ או במספר קבצים, אפשר לגבות אותה, למחוק אותה וליצור אותה מחדש בקלות.
שימוש נפוץ נוסף הוא בדיקה של תוכנה חדשה בסביבה נקייה. כך מפתחים בודקים תוכנה בלי לסכן את מערכת ההפעלה הראשית. אם יש חשש לבאגים או לקוד זדוני, ההרצה במכונה וירטואלית מבודדת את המערכת הראשית.
IBM הייתה הראשונה, בשנות השבעים (1972), ליישם מכונות וירטואליות על מחשבים מרכזיים בסדרת 370. היא פיתחה את מערכת ההפעלה VM, שלימים הפכה לגרסה z/VM. מערכת זו יכולה להריץ מאות ואף אלפי עותקים של מערכות הפעלה אחרות על אותו מחשב. כל מערכת אורחת מקבלת שירותים מהמערכת המארחת ומתנהגת כאילו היא רצה על מחשב אמיתי.
בסביבות שרתים שימוש במכונות וירטואליות חוסך רכש ותחזוקה של מחשבים רבים. בנוסף, מאפשר העברת שרת וירטואלי ממחשב אחד לאחר בעת תחזוקה, לעיתים בלי להפסיק את השירות. המעבר נעשה לרוב דרך חיבור מהיר, כמו סיב אופטי.
רשת מקומית וירטואלית, או ענן, נועדה להקל על ניהול רשתות במשרדים בינוניים. במקום שרת פיזי בכל משרד, כמה שרתים וירטואליים יכולים לרוץ על שרת מרכזי בחוות שרתים. כך ניתן לשכור מנהל רשת מרכזי ולרכז את הניהול.
רשת כזו מאפשרת גם חיבור מרחוק. עובד הנוסע יכול להתחבר מרחוק אל הרשת המשרדית ולגשת לקבצים וליישומים כאילו הוא במשרד. היתרונות כוללים חיסכון במקום, פרטיות ואבטחת מידע ממוקדת.
תוכנה נכתבת בדרך כלל בשפה ברמה גבוהה. מהדר (קומפיילר) היא תוכנה שמתרגמת את הקוד לשפת מכונה, שאותה המחשב מבין. בעיה מתעוררת כי מחשבים שונים מדברים בשפות מכונה שונות. הפתרון הוא לתרגם לשפת ביניים במקום לשפת מכונה.
מכונה וירטואלית לשפת תכנות היא תוכנית שמריצה קוד בשפת ביניים. היא מתרגמת את שפת הביניים לשפת המכונה בזמן הריצה. כך התוכנית ניידת ויכולה לרוץ על מחשבים שונים בלי שינוי בקוד המקור.
דוגמה בולטת היא Java. קוד Java מתורגם ל-bytecode, שהיא שפת ביניים. ה-JVM (Java Virtual Machine, מכונת Java הווירטואלית) מתרגמת את ה-bytecode לשפת המכונה בזמן הריצה. זה מאפשר לתוכניות Java לרוץ על מערכות הפעלה רבות.
גם ארכיטקטורת .NET של מיקרוסופט כוללת רכיב דומה. ה-CLR (Common Language Runtime) הוא המנוע שמריץ קוד ב־CIL (Common Intermediate Language), שפת ביניים משותפת. כך אפשר לפתח בשפות שונות, אם הן מהודרות ל־CIL.
יתרון מרכזי הוא ניידות: תוכנה המהודרת לשפת ביניים תוכל לרוץ על חומרות שונות בלי שינוי בתוכנית. עם זאת, ביצועי תוכניות הרצות על מכונה וירטואלית נוטים להיות איטיים יותר. זה קורה בגלל התרגום בזמן ריצה.
בשפות מסוימות ניתן להידר ישירות לשפת מכונה, וכך לשפר את הביצועים, אך אז מאבדים חלק מהניידות. למרות זאת, במקרים רבים פעולות כמו הקצאת זיכרון מתבצעות בזריזות גם בתוך מכונה וירטואלית.
בעיה נוספת היא שילוב ספריות ותוכניות קיימות הכתובות לשפת מכונה. זה דורש מנגנונים מורכבים כדי לאפשר אינטגרציה בין קוד מקומי לקוד רץ על המכונה הווירטואלית.
מכונה וירטואלית היא תוכנה שיוצרת מחשב מדומה בתוך המחשב שלך. מחשב מדומה מאפשר להריץ מערכת הפעלה אחרת, בלי לשנות את המחשב האמיתי.
עם מכונה וירטואלית אפשר להפעיל שתי מערכות הפעלה יחד. למשל: לינוקס בתוך חלונות. זה שימושי כדי לבדוק תוכנות בלי לסכן את המחשב.
מכונה וירטואלית נשמרת בקובץ. אם משהו נשבר, מוחקים ומחזירים בקלות.
חברות גדולות משתמשות במכונות וירטואליות כדי להריץ הרבה מערכות על מחשב אחד. IBM הציעה את הרעיון כבר ב־1972. כך חוסכים מחשבים והרבה עבודה. אפשר גם להעביר שרת ממחשב אחד לאחר בלי לכבות אותו.
ענן הוא רשת וירטואלית. במקום שרת אצל כל משרד, השרתים נמצאים במקום אחד גדול. עובדים יכולים להתחבר מהבית או מחו"ל.
תוכנה נכתבת בשפה שנוחה לאנשים. כדי שהמחשב יבין את זה צריך מתרגם בשם מהדר. במקום לתרגם ישר לשפת המחשב, אפשר לתרגם לשפה ביניים.
מכונה וירטואלית קוראת את שפת הביניים ומתרגמת אותה בזמן הריצה. כך התוכנית עובדת על מחשבים שונים.
דוגמה: Java מתורגמת ל־bytecode. ה־JVM (מכונת Java) מריצה את ה־bytecode על כל מכשיר.
גם .NET משתמש ברעיון הזה, עם ה־CLR שמריץ קוד בשפת ביניים.
יתרון גדול הוא שאותה תוכנה תעבוד על מחשבים שונים. חסרון הוא שהרצה על מכונה וירטואלית יכולה להיות איטית יותר. לפעמים מאבדים מהמהירות בשביל הנוחות והניידות.
תגובות גולשים