המונח קוד מתאר כל אות, מילה, משפט, פסקה ותחביר של שפה מלאכותית המשמשת לחישוב.
שפת קוד איננה "שפה טבעית" כפי שהמונח מוגדר בספרות הבלשנות ומכאן שבדרך כלל היא לא תשמש כשפת תקשורת כללית.
קוד הוא מבנה שפתי עיקרי בשפות מחשב.
קיימים סוגים רבים של קודים. רוב ככל הקודים הם תערובת של אנגלית ומתמטיקה.
קידוד (באנגלית: Coding) הוא הפעולה של מסירת מסר בשפת קוד מסוימת; בתחום המחשוב ככלל הדבר נעשה בצורת כתיבה של שפת מחשב מסוימת.
קוד תוכנה (באנגלית: Program code) הוא כל קוד בשפת מחשב אשר הרצה שלו במערכת מחשב עם מחשב מתאים תניב פלט כתוכנה.
קוד תוכנה יכול להיות קוד מקור או קימפול (גרסה מקומפלת) של קוד מקור. המונח קימפול יוסבר בהמשך המאמר.
קוד כקלט ופלט
קלט הוא כל מה שמעובד על ידי מכונה.
בהקשר מחשוב, קלט או לחלופין קלט מידע הוא כל מידע שמכונת חישוב או מערכת מחשב קולטת ומעבדת ← באופן כללי זהו קלט מידע שאנו מזינים או "מקליטים" אל מכונת החישוב או מערכת המחשב; פעולת עיבוד קלט מצד תוכנה נקראת הרצה או "ריצה".
באופן כללי, בעקבות קליטת קלט ועיבודו מכונה (כולל מערכת מחשב) תניב פלט.
- דוגמה ל"קלט" זה להקיש על מקש של מקלדת של מחשב. הפלט יהיה למשל תו מסוים על מסך המחשב.
- דוגמה נוספת לקלט היא אור שנקלט בחיישן של רובוט; הרובוט יגיב לאות החיישן הזו כפי ההוראות שבתוכנה המנחה אותו איך להגיב.
פלט (באנגלית: Output) הינו תוצר של מכונה ובזה גם מכונה חשמלית כגון מערכת מחשב; מקורו של פלט הוא בעיבוד קלט.
דוגמה לפלט במחשב הוא אות שמופיעה על מסך מחשב לאחר הקלדה על מקש המייצג את האות במקלדת או לאחר פקודת הצגה של מסמך על המסך. מקש יכול לייצג אותיות שונות בהיעדר מצב מסוים או בהימצאותו של מצב מסוים; כגון היעדר מצב CapsLock או הימצאותו של מצב CapsLock (או בעת בחירת אפשרויות מרובות למקש מסוים כמו במקלדת וירטואלית בסמארטפון)
דוגמה נוספת לפלט היא פעולה שמבצע רובוט לאחר שקיבל הוראה לכך; למשל, לאחר שהוא מזהה אשכול עגבניות בחיישן, ישנה קריאה לפונקציה עם ההוראה לקטוף אותו - כלומר להחזיקו בזרוע אחת ולחתוך את גבעולו בזרוע שנייה ולאחר מכן להעביר אותו למטען וזה למעשה הפלט של הרובוט במצב תקין.
קוד מקור
המונח קוד מקור (באנגלית: Source code) משמש לתאר קוד שהרצתו במחשב תאפשר שימוש בתוכנה שאותה הוא מהווה.
פיתוח תוכנה נעשה בדרך כלל על ידי פיתוח קוד מקור ישירות.
קוד מקור מקודד בשפת מחשב אחת או יותר (אשר בדרך כלל אחת מהן תהיה שפת התנהגות) ובהתבסס על רעיון מסוים ליצירת תוכנה שמבצעת מטרה מוגדרת היטב.
ככלל, שינויים בקוד תוכנה (ולמעשה בתוכנה עצמה כפי שהיא מופעלת למשתמש) ← הם שינויים בקוד המקור שלה.
בעת הרצת קוד מקור ייתכן וייעשה שימוש במידע "גולמי" מבסיס נתונים (כגון טקסט בשפת תקשורת כללית) אם כי מידע זה בדרך כלל איננו נחשב לחלק מקוד מקור (הוא לא מידע שנכתב מקורית עבור פיתוח התוכנה ופעילותה היסודית).
יצירה
יצירת קוד מקור ומכאן תוכנה מתבצעת בדרך כלל עם תוכנת עורך טקסט (כגון Visual Studio Code או Geany ואחרות) ויכולה להתבצע באופן ספונטאני לפי צורך נקודתי (כמו בתוכנת סקריפט) או בצורה סדורה ביותר בשילוב עם תוכנת תיעוד של באופן כללי כל שינוי בקוד, אפילו של תו בודד, כמו עם תוכנת ניהול גרסאות.
קוד המקור של תוכנה מאורגן כאמור בקובץ אחד או יותר ונשמר בזיכרון המחשב (לכל הפחות בזיכרון כונן אחסון כללי).
הרצה
ניתן להריץ במחשב קוד מקור כשלעצמו ולקבל פלט כתוכנה ממומשת אך לעתים עדיף להריץ קומפילציה שלו שאותה ניתן ליצור בתהליך הנקרא קימפול.
קמופילציה (באנגלית: Compilation) תהיה תרגום (או במקום "תרגום" ← "ייצוג") קוד המקור לקוד מכונה. המונח קוד מכונה יוסבר בהרחבה בפרק הבא אך לעת עתה אסבירו בתמצית.
אחזור ואדגיש שקומפילציה היא גרסה "מקומפלת" של קוד מקור (קוד מקור בשפת מחשב כל שהיא שאיננה קוד מכונה).
קימפול (באנגלית: Compiling) הוא תהליך יצירת קומפילציה ובדרך כלל נעשה בעזרת תוכנות המכונות קומפיילר (compiler).
באופן כללי מהיר יותר להריץ קומפלציות מאשר קוד מקור ישירות שכן המחשב לא צריך לתרגם קוד מקור לשפה נמוכה יותר או לשפת מכונה (כי הוא כבר מיוצג בשפת מכונה) אם כי בתוכנות "קטנות" (יחסית לכוח החומרה) זה לא ממש משנה.
אז בגדול ניתן לייצג את קוד המקור של תוכנה (לא משנה אם נכתב בשפת מחשב אחת או בשניים או יותר שפות מחשב) לקוד בשפה אחת, שפת מכונה, אחת בתהליך הנקרא קימפול.
בפשטות, קימפול הוא המרה (שינוי צורה) של קוד המקור משפה אחת או יותר לקוד מכונה בשפה יחידנית בייצוג כל שהוא (כגון ייצוג בינארי או הקסהדצימאלי).
ככלל, קוד מקור שעבר קימפול לקוד מכונה הוא מהיר יותר לעיבוד במערכת מחשב מאשר קוד מקור כשלעצמו (שכן המחשב --- המכונה, צריך לפענח אותו פחות) ובכך הוא מסייע לחסוך אנרגיה במערכות מחשוב הפועלות על סוללה (כגון קומפפון או רובוט מהלך).
קוד מכונה
קוד מכונה (באנגלית: Machine code) הוא כל קוד תוכנה הכתוב בשפת מכונה; ככלל זהו סוג קוד התוכנה שמהיר ביותר למחשב לחשב או לחלופין לעבד.
קוד זדוני
קוד זדוני (באנגלית: Malicious code או Malignant code) הוא כל קוד תוכנה אשר הרצה שלו במחשב תגרום לנזקים ישירים או עקיפים למערכת המחשב ו\או לבעליה.
המונחים Spyware ו Malware מתארים שני סוגים כללים של קוד זדוני.
קוד זדוני יכול להיות וירוס מחשב, תוכנת מעקב השולפת נתונים ומשדרת אותם למערכת מחשב אחרת או אף להוות "סוס טרויאני" דרכו גנב יוכל להיכנס למחשב של קורבן ולגנוב נתונים רגישים כגון סיסמאות.
טפסים השומרים מידע בססיס נתונים עשויים לכלול קוד תשאול המבצע פעולה הרסנית שיכולה להקריס סביבת שרתים או אתר ווב (כמו SQL injection) ולכן נדרשת זהירות רבה וגישה מינימליסטית בפיתוח טפסים.
קוד מקור סגור וקוד מקור פתוח
בפיתוח תוכנה ושיווק תוכנה, קוד מקור סגור אני מגדיר ככינוי לכל תוכנה אשר יש איסור על הפצת קוד המקור שלה מחוץ למאגרי הקוד של צוות הפיתוח המפתח אותה.
כל תוכנת קוד מקור סגור היא תוכנה קניינית אך לא כל תוכנה קניינית היא תוכנת קוד מקור סגור.
בפיתוח תוכנה ושיווק תוכנה, קוד מקור פתוח אני מגדיר ככינוי לכל תוכנה אשר אין איסור על הפצת קוד מקור המהווה אותה לכל דורש; כלומר, קוד מקור כזה "פתוח" לשימוש כלל המעוניינים בכך ולא רק לשימוש המתכנתים שפיתחו אותו לראשונה טרם שחרורו.
מושג רישיון תוכנה כמו גם מושג רשיון טקסט ומדיה ("רשיון תוכן") הם מושגים חיוניים בשיח על קוד מקור פתוח.
קיים סוג כללי של רשיונות קוד מקור פתוח עם הכי פחות הגבלות שנקרא תוכנה חופשית ומלבד עיקרון קוד המקור הפתוח כולל גם עקרונות כלליים נוספים.
באופן כללי לאחר שנקבע רישיון קוד מקור פתוח לתוכנה ולאחר שחרור התוכנה, יהיה קשה עד בלתי אפשרי לשנותו לרישיון קוד מקור סגור; אם התוכנה טרם שוחררה ואין הפצה של קוד המקור שלה עם קובץ רישיון נתון כמובן שאין בעיה לשנות את הרישיון לאיזה רישיון שרוצים אך לאחר השחרור הדבר לכל הפחות ידרוש הסכמה של כל משתמש שכבר השיג עותק ושינוי ללא הסכמה (אם בכלל מותר ← תלוי ברישיון שנקשר עם התוכנה) אף עלול לגרור תביעה משפטית נגד מי שניסה לשנות את הרישיון.
לעתים יש בעיות קהילה בהקשר קוד מקור פתוח שמניסיוני נדיר יותר למצוא בהתקשרות מול מפתחי תוכנות קוד מקור סגור: קהילות קוד מקור פתוח מורכבות מאנשים שלא מקבלים שכר או גמול כספי על השקעתם ובמקרים רבים התנהלותם אינה מפוקחת מצד גורם האמון על מוסר או אתיקה והדבר גורר לא אחת בעיות של קצרי תקשורת בין "נותני השירות" לבין "לוקחי השירות", בעיקר אם הללו מגיעים מרקעים שונים מבחינת ידע בפיתוח תוכנה וכדומה וגורם לשיח ירוד הכרוך בתחושת כפיות טובה (בעיקר בצד "נותני השירות"), לסרקזם ולדוגמה רעה לחדשים.
תוכנה קניינית
תוכנה קניינית (באנגלית: Proprietary software) אני מגדיר ככל תוכנה אשר יוצריה מגדירים אותה כרכוש ואוסרים על הפצת קוד המקור שלה ללא שינויו או עם שינויו בלי אישור מפורש מהם בכתב.
קוד המקור של תוכנה קניינית יכול להיות מוגדר "קוד פתוח" אך בדרך כלל הוא יהיה קוד סגור ושימוש בה יעלה כסף; זאת בניגוד לתוכנות המוגדרות כתוכנות קוד פתוח בכלל ותוכנה חופשית בפרט (עם רישיון תוכנה ציבורי תואם) אשר בדרך כלל קוד המקור שלהן זמין להפצה ושינוי ללא כל הגבלה למעט פשיעה ואולי גם למעט היעדר ייחוס (קרדיט) והשימוש בהן הוא ברוב המקרים חינמי.
מונחים משניים
- זריקת קוד (באנגלית: Code injection) אני מגדיר כפיסת קוד אשר משנה תגובה מסוימת לאיוונט מסוים, מבלי לשנות את שכבת הקוד שהייתה גורמת לאיוונט המקורי להתרחש
- שכבת קוד משוימת ומוגדרת היטב המסופקת על ידי מפתח תוכנה לשינוי ההתנהגות של התוכנה שהוא עצמו פיתח היא למשל פרוצדורה המכונה באופן כללי הוק (hook)
הערות כלליות
- לעתים ייאמר שקוד מקור מודולרי קומפל לגרסה לא מודולרית שלו (מנניח 10 לקבצים לקובץ אחד ארוך בלבד שמהיר יותר להריץ) אך יותר נכון להגדיר זאת התמרה מאשר קימפול, לפחות לפי דעתי.