Firebird

Interbase

תוכנת Interbase החלה כרעיון של ג'ים סטארקי (Jim Starkey), אשר עבד באותו הזמן בחברת דיגיטל (DEC) על מנוע SQL (שעוד לא נקראה אז בשם זה) עבור מסד נתונים רשתי עבור החברה. לג'ים צץ רעיוןלפתח מערכת שתוכל לעבוד עם מספר משתמשים בו זמנית בלי לנעול את שאר המשתמשים כאשר מישהו מושך/יוצר/מעדכן מידע (דבר שכיח במסדי נתונים טבלאיים עם יחסי שדות [Foreign keys]). הוא החל לעבוד על הרעיון עבור חברת DEC, אבל מלחמות פנימיות על הפיתוח של Rdb/VMS (אשר כיום מוכר בתור Oracle) גרמו לו לעזוב את החברה.
לאחר עזיבתו את החברה, הגיע לחברת Apollo Computers, אשר חיפשה אנשי מסדי נתונים לפתח מסד נתונים עבור גרסת ה UNIX שלה לתחנות עבודה, והסכימה לממן פיתוח. בעזרת Apollo, ג'ים פיתח את מסד הנתונים Groton Database Systems (על שם המקום בו מסד הנתונים פותח). ב-1984 החלה העבודה על מסד הנתונים, אשר ב-1986 קיבל את השם Interbase. 
אף ש־Interbase הכניס כסף לחברה, החברה התמודדה עם קשיים כספיים במכירת תוכנה, והחליטה לצאת מהשוק. החברה התחילה ב-1986 להעביר בהדרגה את מסד הנתונים שלה לחברת Ashton-Tate אשר יצרו בין היתר את מסד הנתונים dBASE. היא רכשה מספר חברות המתעסקות במסדי נתונים. לאט לאט החלה גם חברת Ashton-Tate להיכנס לבעיות, וחברת בורלנד רכשה מהם את Interbase.

Firebird

בשנת 2000 חברת בורלנד הוציאה לקוד הפתוח גרסה של מסד נתונים Interbase. הגרסה שיצאה הייתה 6.1. הגרסאות הבאות בתור, חזרו להיות קוד סגור. הסיבה ליציאת הקוד של Interbase הייתה בגלל שבורלנד רצתה חברה נפרדת עבור פיתוח מסד הנתונים, אך בגלל קשיים למצוא חברה שתסכים לתנאים הם הוציאו את Interbase בתור קוד פתוח, אבל חזרו מהר מאוד בגרסה 6.5 להחזיק בקוד ללא יציאת התיקונים חזרה.
בעקבות יציאת הקוד של Interbase יצאו כמה פרויקטים אשר המשיכו את הפיתוח של מסד הנתונים בתור קוד פתוח. הפרויקט שקיבל את תשומת לב הרבה ביותר היה פרויקט בשם Firebird. לפני מספר שנים, חלק מהפרויקטים הנוספים איחדו כוחות והקוד שלהם נכנס אף הוא ל-Firebird, מה שהוליד את גרסה 2 של מסד הנתונים עם תוספות ושינויים, כאשר הבסיס של בורלנד (כלומר הצורה שמבנה מסד הנתונים עובדה בה) נשאר זהה, ולכן גם מנוע של Interbase מסוגל לעבוד עם קובצי מסד הנתונים של Firebird עד גבול מסוים. שימו גרסה 3 תכיל שילוב קוד נוסף בפרויקט, כדוגמת תמיכה ב SMP ועוד אשר עוד לא נכנס בגרסה 2.

טבלאות פנימיות

כל מסד נתונים ב Firebird שומר את המידע והפעולות השונות על ידי שימוש בטלבאות פנימיות. חלק מטבלאות אלו משמשות לשם ניטור הפעולות השונות שנעשו במסד הנתונים, וחלקן האחר שומרות מידע על טבלאות השונות, על הדקים, פרוצדורות מאוחסנות ולמעשה כל אספקט הקיים ומגודר במסד הנתונים.
הטבלאות המשמשות לניטור מקבלות את השם המקדים של MON$ - כלומר Monitor, בעוד שהמידע על מסד הנתונים עצמו מקבל שם מקדים של RDB$.
הטבלאות הפנימיות ניתנות לצפייה כמו כל טבלה אחרת, וכן ניתן לבצע עליה פעולות כדוגמת select ואפילו insert, delete ו update.

שפת SQL

שפת ה-SQL של Firebird אינה תלויה ברישיות, כלומר אין הבדל בין אות קטנה לגדולה. חוסר התלות ברישיות קיים גם בשמות של השדות עצמם. במידה ורוצים שדה שהוא בעל תלות ברישיות, יש לשים את שם השדה עם גרש כפול (הסימן "). תחביר ה-SQL של Firebird נקרא DSQL, ומכיל את הפעולות הרגילות שיש בSQL. התמיכה של Firebird בפרוצדורות מאוחסנות קיבלה שפה משל עצמה בשם PSQL. שפת PSQL אינה מוגבלת אך ורק לפרוצדורות, אלא מדברת גם על כתיבת trigger במסד הנתונים. כאשר Firebird זקוק להרצת שאילתות SQL, הוא מתרגם את השפה לשפה בינארית (BLR) אשר אותה הוא מריץ בפועל, ולמעשה כך הוא גם יודע מתי יש בעיה או שגיאה עם מה שנכתב עוד לפני הרצת השאילתה עצמה.
בזכות היותו של Firebird מסד נתונים ACID מלא, כל פעולת SQL, נשמרת כטרנזקציה ויש צורך לבצע commit על מנת שהפעולות יתקבלו מעבר לחיבור הנוכחי של המשתמש. בזכות גישה זו, ניתן במידה ונעשתה טעות גם לעשות rollback עבור הטרנזקציה. במידה ולא תתבצע פעולת commit, ברגע שהחיבור יתנתק ממסד הנתונים, או חיבור אחר ינסה לצפות במידע אשר נוסף או שונה, לא יהיה זכר לפעולות שבוצעו.
כל ההגדרות, כדוגמת יצירת טבלה, יצירת פרוצדורה, הדק, view, domain וכו', נשמרות כ-DDL (ראו SQL). ל-Firebird יש תמיכה מרשימה מאוד ב-DML (ראו SQL), אשר מאפשרת לבצע מניפולציה על מידע עוד בהגדרת השדות עצמם. למשל ניתן ליצור שדה שהוא מחושב (נקרא Computed By) מנתונים אשר הוזנו כבר על ידי המשתמש. למשל במידה ונשמר שם פרטי ושם משפחה, ניתן ליצור שדה שיכיל שם מלא, על ידי שימוש בשדה שהוא Computed By. בנוסף, ניתן להגדיר ב-Firebird כי שדה מסוים יכיל ערכים מורשים בלבד, כדוגמת טווח בין 1 ל-9, או מחרוזת באורך מסוים, או אשר מכילה רק תווים מסוימים, והרשימה עוד ארוכה.
במידה ומגדירים Domain ב-Firebird, ניתן מראש גם להגדיר את מבנה המידע שרוצים, ולא חובה לשים אותו כאשר יוצרים את הטבלה או מוסיפים שדה מסוים. כל אלו הם חלק מה-DML של Firebird.

אבטחה

Interbase עבר הרבה מאוד מהפכות בנושא האבטחה, ו-Firebird ממשיך לשנות גישות כיצד ניתן לנהל משתמשים וגישה למידע. Firebird ו-Interbase עובדים עם קובץ ייעודי עבור ניהול משתמשים. בגרסה 2 של Firebird הקובץ נקרא security2.fdb. מסד הנתונים מכיל משתמש ברירת מחדל בשם SYSDBA עם הסיסמה masterkey. המשתמש לרוב מקבל ייחס של משתמש על, אך ניהול הרשאות המשתמשים ממומשות בתוך מסד הנתונים הספציפי, ולא בצורה גלובלית בשרת.
Firebird מאפשר ליצור בתוך מסד נתונים קבוצות של הרשאות אשר נקראות Role, ובעצם ניתן להכיל אותן למשתמשים השונים בהתאם לצורך ולרצון, ובכך ליצור סוג של ACL (פירושה הוא Access Control List). השפה המשמשת לעבודה ותחזוקת role נקראת Data Control Language או DCL בקיצור. ניהול המשתמשים והאבטחה נעשה באמצעות כלי ייעודי בשם gsec. הכלי מאפשר ליצור משתמשים וסיסמאות עבורם.
בגרסה 2.5, נוספו טבלאות ה MON$ גם עבור ביצוע Audit Trail ו Trace אשר משמשות עבור דו"ח וניטור פעולות אשר נעשו במסד הנתונים כולל מי עשה את הפעולות.

עבודה עם UDF

Firebird תומך בגישה של UDF אשר פירושה הוא פונקציות המוגדרות על ידי המשתמש (User Defined Functions באנגלית). הגישה הזו מאפשרת לכתוב ספריות משותפות בשפה מהודרת, וניתן להשתמש בפונקציות הנכתבות בה בתוך השאילתות השונות כאילו היו חלק משפת הSQL.
יצירת UDF נעשית בצורה הבאה: 
{$IFDEF FPC}
 {$mode objfpc}
 {$packrecords c}{$ENDIF}library udf_library;function get_udf_version : integer; cdecl; export;begin
 Result := 1;end;exports
 get_udf_version;end.
על מנת לטעון את הספרייה אשר נוצרה, יש להשתמש בקוד ה SQL הבא:
declare external function f_get_udf_versionreturnsinteger by valueentry_point 'get_udf_version' module_name 'udf_library';
בשביל להשתמש עכשיו בפונקציה, ניתן לכתוב שאילתא כזו:
select f_get_udf_version() from rdb$database
יש לזכור כי במערכות הפעלה אשר הן דמויות לינוקס או כמו יוניקס, יש להוסיף לשם הספרייה את המקדם lib לפני שם הספרייה. אין צורך להגדיר את סיומת הספרייה (כלומר so או dll).

רישיון

בורלנד הוציאה את קוד המקור תחת שני רישיונות, IPL ו־IDPL. שניהם דומים לרישיון ה־MPL של מוזילה עם שינויים מזעריים והם רישיונות copyleft חלשים.

פיתוח

מסד הנתונים נכתב במקור בשפת C וחלקו הגדול שוכתב לשפת C++‏ בגרסה 2.
את גרסת הפיתוח של מסד הנתונים ניתן להשיג באמצעות מערכת בקרת התצורה Subversion.