תוכנה
תוכנה או תוכנת מחשב (באנגלית: Software) היא בהגדרה כללית שורת קוד אחת או יותר במסמך השמורה בזיכרון מידע במערכת מחשב ומורה למחשב איך לעבוד (איך לעבד מידע) בהקשר נתון בעת ריצתה ← אז גם ניתן להשתמש בה.
המונח תוכנה מגיע מן השורש "תוכן".
בעת הרצת קוד תוכנה מצד מחשב, יפעל המחשב לפי קוד זה כך שניתן יהיה להשתמש בתוכנה שהוא מהווה ולקבל דרכה פלט;
פלט יכול להיות תוכן על מסך (במקרה של מערכת מחשב המציגה פלט על מסך) ו\או פעולה מרחבית (מכנית) מסוימת כמו במקרה של רובוט.
בכל הנוגע לפלט על מסך, אפשר שפלט זה יכלול שדה קלט אחד או יותר שיאפשרו לנו להשיג פלט נוסף מן התוכנה לפי רצוננו ולפי מגבלות התוכנה עצמה.
קלט שהזנו למערכת למטרת פיתוח תוכנה, כתוב בשפת מחשב אחת לפחות.
תוכן שהוזן כקלט בעת פיתוח תוכנה מהווה קוד מקור (או קימפול שלו) שנשמר בזיכרון מידע במערכת מחשב ושנריץ הוא התוכן שמבסס את הפלט (שימוש בתוכנה); על כן עם הרצת מסמך אחד או יותר שמכיל קוד תוכנה כזה, נקבל פלט בצורות שונות, כגון:
- מידע (ללא ממשק משתמש או עם ממשק משתמש דוגמת שדות קלט) או לחלופין סביבת מציאות מדומה על מסך המחשב
- פעולה של מערכת משובצת מחשב שתלויה בתוכנה; למשל, פעולה שמבצע רובוט לפי תוכנה וגורמת לשינוי במרחב בהתאם לחומרה אקסוגנית שלו; כלומר, חומרה שאיננה חלק בסיסי ממערכת המחשב שלו
חומרת מערכת מחשב עשויה לכלול בתוכה תוכנה קושחתית עיקרית הצרובה בה וכן תוכנה קושחתית משנית המבוססת על תוכנה זו (אם משפט זה היה לא מובן מומלץ לקרוא הערך תוכנה קושחתית).
תוכנה קניינית
תוכנה קניינית (באנגלית: Proprietary software) אני מגדיר ככל תוכנה אשר יוצריה מגדירים אותה כרכוש ואוסרים על הפצת קוד המקור שלה ללא שינויו או עם שינויו בלי אישור מפורש מהם בכתב.
קוד המקור של תוכנה קניינית יכול להיות מוגדר "קוד פתוח" אך בדרך כלל הוא יהיה קוד סגור ושימוש בה יעלה כסף; זאת בניגוד לתוכנות המוגדרות כתוכנות קוד פתוח בכלל ותוכנה חופשית בפרט (עם רישיון תוכנה ציבורי תואם) אשר בדרך כלל קוד המקור שלהן זמין להפצה ושינוי ללא כל הגבלה למעט פשיעה ואולי גם למעט היעדר ייחוס (קרדיט) והשימוש בהן הוא ברוב המקרים חינמי.
תוכנה חופשית
בכל הנוגע לרישיונות שימוש בתוכנה, קיים סוג כללי של רישיונות קוד פתוח המדגיש "חופש שימוש מקסימלי" בתוכנה, אשר נקרא תוכנה חופשית.
ברישיונות מסוג "תוכנה חופשית", מלבד עיקרון קוד המקור הפתוח לקריאה, שינוי והפצה מצד כל אדם, נכללים גם עקרונות כללים נוספים מסוימים העלולים להשתנות מעט בהגדרתם בכל רישיון שהוגדר כך.
עקרונות נפוצים
מניסיוני, רישיונות תוכנה חופשית חולקים בדרך כלל עקרונות אלה:
- החופש הכללי להריץ קוד מקור ללא הגבלה
- החופש הכללי ללמוד קוד המקור ולשנותו ללא הגבלה[1]
- החופש הכללי להפיץ עותקים של קוד מקור כמו שהוא
- החופש הכללי להפיץ עותקים של קוד מקור לאחר שינוי של תו אחד לפחות
- איסור תרבותי-חברתי על שתילת רכיבי מעקב אחר משתמשים בקוד המקור
החופש הכללי
נאמר "החופש הכללי" ולא רק "החופש" בכדי להשאיר מקום לאקספציות הנוגעות לחוקי מוסר יסודיים; כך למשל, אין הכוונה לחופש המאפשר גניבה (שלא למטרת הישרדות), שיעבוד, רצח, אונס, פדופיליה וכדומה.
רישיונות נפוצים
למיטב ידיעתי, הרישיון הנפוץ ביותר לרישוי תוכנות "חופשיות" הינו הרישיון הציבורי הכללי של גנו (רישיון GPL) לגרסאותיו השונות.
מלבד רישיון GPL קיימים רישיונות נוספים כגון רישיון שלושת הפסקאות של BSD, רישיון Artistic ועוד; כמובן שניתן ליצור רישיון קסטומאלי ("מותאם אישית") אם מעדיפים זאת אך בקרב מפתחי תוכנה חופשית נהוג להשתמש ברישיון קהילתי (מפותח קהילתית בעצמו) נפוץ.
רישיון ציבורי קהילתי אשר חופשי עוד יותר מרישיון GPL הוא רישיון Unlicese.
תרבויות קוד פתוח ותוכנה חופשית
ארגונים שונים המקדמים תוכנה חופשית אולי ישתמשו בהגדרות שונות במקצת למונח "תוכנה חופשית".
למיטב ידיעתי, הארגון המחמיר ביותר מבחינת הבטחת ה"חופש" של משתמשים לשימוש בקודי מקור או בעד "חופש מקסימלי" הוא ארגון "קרן התוכנה החופשית" (Free Software Foundation ובקצרה FSF) אשר מבוסס על משנתו של ריצ'ארד סטולמן (Richard Stallman) בכל הנוגע לתוכנה חופשית אם כי הוא גם מחמיר בנושאי מתן ייחוס (קרדיט) כאשר רישיון כגון Unlicense דומה עד כמעט זהה לו ולא מחמיר בכך.
מניסיוני, בדרך כלל, התומכים בתוכנה חופשית מסתייגים מתרבות "מקור פתוח" (כתרבות ולא כעיקרון) ומזהים בתרבותם תרבות נפרדת ו"חופשית באמת"; עם זאת, יש המכלילים תרבויות אלה תחת מונח אחד הנקרא "תוכנה חופשית וקוד מקור פתוח" (Free and Open Source Software ובקצרה FOSS); אני תומך ב FOSS בכללי ולא מזדהה עם אף אחת מהקבוצות באופן ספציפי.
ההקבלה בין קוד מקור למתכון וללחן תווים
מתכון הוא הסבר טכני לגבי איך להכין מאכל מסוים המורכב לפחות מפרק רכיבים ומפרק אופן הכנה. בקהילת התוכנה החופשית נהוג להקביל קוד מקור למתכון וללחן תווים
חבילת תוכנה
חבילת תכונה או ערימת תוכנה או סטאק (באנגלית, לרוב software bundle או software stack) אני מגדיר כקבוצה של שתי תוכנות או יותר ששילובן יחדיו או האינטראקציה ביניהן גורם למימוש של רעיון מסוים בהקשר מסוים, ככלל במטרה לפתור בעיה מסוימת (דרך תוכנה).
דוגמה בולטת לחבילת תוכנה היא סביבת שרתים המורכבת מחבילת תוכנות שרת; מערכת הפעלה תואמת, שרת ווב, שרת בסיס נתונים, שרת שפת התנהגות (שהוא תוכנת שפת ההתנהגות בעצמה ודוגמה תהיה PHP), שרת אימייל וכדומה. דוגמה נוספת היא חבילת תוכנות דרייברים במערכת הפעלה אשר מאפשרים הפעלה ושימוש נאות בחומרה דרך מערכת ההפעלה של המחשב, למשל כדי שנוכל להריץ בו תוכנה מסוימת ובזה גם משחק מחשב מסוים שאלמלא דרייברים אלה לא יכלנו להריץ או לא להריץ ביעילות (מערכת ההפעלה לא הייתה מזהה או לא הייתה מזהה היטב את החומרה הדרושה להרצה תקינה של המשחק).
ראו גם
הערות שוליים
- ^ בין מלמידתו ישירות ובין מלמידת קוד מקומפל שעבר הנדסה הפוכה שלו