Linux Odyssey 是我在北科大五專期間,與同學們合力開發的網頁專案。本文寫於 2024 年三月,當時剛得到 g0v 零時小學校首獎,介紹 Linux Odyssey 這個專案的背景,我們的開發歷程,使用者的推廣活動、參賽經驗,以及在當時的未來展望。
現在我們已畢業,專案成員各奔東西,目前專案的開發也暫停中,但網站仍透過比賽獎金持續運作中。

Linux Odyssey 網站截圖
專案動機
Linux 是一個自由的作業系統,允許你自由的修改,調整成最順手的模樣,尤其適合程式開發使用。我使用 Linux 長達 7 年,對它非常滿意。當年我還是個國中生,第一次知道除了 Windows 和 Mac,世界上還有 Linux 的存在,便產生了莫大的好奇心。當時用家裡的一台老電腦跑起了 Ubuntu,想像著這部電腦中有一個自由的靈魂正在奔馳,便感到無比興奮。
使用 Linux 困難嗎?是的,使用 Linux 需要學習,但就如同我們學習使用 Windows,再稍微困難一點 ;)。學習 Linux 的過程,就像是探索一個開放世界。你可以在這個世界的各個角落,發現前人的精心設計。我也漸漸的完全使用 Linux 作為我的作業系統,直到今天。
我時不時就會向周圍的朋友「傳福音」,然而對一般人來說,要重新再去學習一個系統太麻煩,並且指令常常令人畏懼。我剛開始接觸指令時,覺得指令好神奇,在黑黑的終端機中輸入一段話就能讓電腦關機,就好像魔法一樣。用了一段時間後,覺得指令許多時候其實比圖形介面更便利。指令往往很小,安裝快速,而且可以將常用的指令寫成腳本重複執行。你甚至可以將不同指令串接,形成新的指令。
我很希望能讓其他人也感受到我學習 Linux 時所體驗到的快樂,並且讓 Linux 不再令人望而生畏,而是有趣而令人興奮的。在 2022 年底要開始製作畢業專題,我與同學們便以「將 Linux 作成遊戲」這個題材開始了 Linux Odyssey 專案。
構想與設計
我們最初的構想,是打造一個 Linux 解謎遊戲。引用資安領域 CTF(Capture the Flag)的概念,將線索與劇情藏在一個 Linux 系統當中,讓玩家探索的過程逐漸揭開世界的真相。這個概念很吸引人,但當時遇到了兩個挑戰:
- 玩家的門檻:設計解謎意味著不能將解法直接說出來,而是要玩家有先備知識。這樣的要求會只有懂 Linux 的人會玩,達不到推廣的目的。
- 媒材的限制:使用 Linux 作為遊戲的媒材很創新,但透過這個媒材寫一個好故事不容易,而且還要過程中兼顧使用者體驗更加困難。
我們花了一個多月的時間構思劇情,遇到許多瓶頸,最後決定先以初學者教學為主軸,並保留未來設計遊戲的可能性。
當初在使用者介面的設計,也討論過究竟要用純粹的終端機介面,還是做成網頁介面。終端機介面即是像 PPT 那樣,在終端機透過 SSH 連線到我們的伺服器,就能開始遊玩。好處是帶入感很高,而且能幫助使用者習慣在真正的終端機中工作。然而如此一來,就限制了多媒體內容與其他提升使用者體驗的可能性。同時,「連上伺服器」也會成為第一個入門的門檻。最終我們決定以初學者教學為主軸,因此選擇了更使用者友善的網頁介面進行開發。
在構想與設計的期間,我們也諮詢了許多開發者與潛在使用者,逐漸確立我們的目標使用者與設計理念。其他開發者的經驗,也對我們開發有很大的幫助。
開發歷程
我們從 2023 年七月暑假開始正式開發。我們採取了敏捷開發中的 Scrum 方法,在每日晚上八點進行每日例會,並在每週五驗收成果與下週進度規畫。
在諮詢其他開發者時,我們得到了許多團隊協作上的建議。我們使用 GitHub 與基於 Pull Request 的協作模式。為了維持程式碼風格的一致性,在專案開始時就設定了 ESLint 與 Prettier,進行靜態分析與自動格式化,並將其放到 GitHub Action 的 CI/CD 流程中自動執行,以確保所有合併後的程式碼都有符合規範。此外所有的 PR 也需要經過至少一名成員 code review,以提升程式碼品質。
我們使用 Notion 進行專案管理以及知識庫,有一個看板可以看到所有成員當前的任務與目前的進度,以外也保存我們的會議記錄與文件。我們使用 Matrix 作為即時通訊平台。Matrix 是一個像是 Slack 的平台,可以建立 Space 並在裡面有多個 Room,同時也有著 Thread 的功能,非常適合團隊討論。Matrix 特別之處在於,它是一個開源的通訊協定,任何人都可以架設自己的 Matrix 伺服器,而不同伺服器之間也能互通,並且所有的訊息都支援端到端加密。此外也可以設定各種 bot,做每日例會提醒或是 GitHub Pull Request 通知。我們還設定了一個 ChatGPT bot,讓我們在群組中直接與 GPT 討論。
敏捷開發的一個核心精神是 “Release early. Release often.” 因此我們將開發目標粗分成三個大階段:
- Proof of Concept (POC): 單一帳號單一關卡,實驗網頁終端機與基礎關卡設計
- Minimum Viable Product (MVP): 多帳號多關卡,開放使用者註冊測試
- Production: 完善所有主要功能
我們 2023 年 9 月中完成了 POC 階段,接著便開始安排一些小規模的使用者試玩。接著在 11 月底完成了 MVP 階段,在我的母校福科國中有了一場大型的帶班體驗。那直到目前 2024 3 月,我們也正在朝向 Production 階段邁進。
活動歷程
為了解使用者的需求並得到回饋,我們很積極的參與社群與各項比賽,並透過這些機會與他人交流,並調整未來的開發方向。
2023 年 10 月,我們第一次參加了 g0v 黑客松,在當天邀請了許多社群朋友來體驗。當時只有一個測試關卡,內容就一次需要使用 4 個指令,且中間引導與說明不足,也沒有針對錯誤情況作說明。因此使用者普遍反應過於困難。雖然遊戲的關卡設計還有待加強,但我們的產品概念得到許多正向回饋,也讓我們確定目前的方向是正確的。我們也在這次活動得知了零時小學校專案孵化竸賽。
2023 年 11 月,我們參加了大專資訊應用競賽,很幸運得到了鈦鉭敏捷開發獎的第二名。該獎項主要是評價專案開發過程中所採用的敏捷方法。我們也藉這個機會,與其他參賽者交流,並累積更多的試玩數據。
2023 年 11 月 24 跟 27 兩天,我們到了我的國中母校福科國中,帶領國三的六個班級,在他們的電腦課體驗 Linux Odyssey。我們在這次活動前重新設計了所有關卡,確保有充分的引導與錯誤指引。在前兩堂課時,我們第一次遇到了伺服器性能耗盡,於是在午休緊急的將伺服器升級。在週末的時候,也針對學生常遇到的問題進行修正。到了 27 號,已經有半數以上的學生能不依賴協助獨立完成關卡。
接著從 2023 年 12 月到 2024 年的 3 月,我們參加零時小學校的專案孵化竸賽,並在這段期間完成了系統 TypeScript 重構。最後我們幸運獲選為茁壯團隊,也在這場活動中,認識了許多開發者願意加入專案。
未來展望
Linux Odyssey 接下來有幾個重要目標,現在準備著手進行:
- 更多課程內容:首要目標是完成 Linux 基礎與 Git 系列教學
- 多語言:為了將這個專案推廣到國際,需要讓介面與關卡內容支援多語言
- 行動版網頁:讓手機也能使用 Linux Odyssey,降低推廣的門檻
- 關卡編輯器:製作一個網頁介面的關卡設計工具,降低開發關卡的門檻,讓使用者能夠自己設計關卡
隨著更多開發者加入,我們也開始要從小團隊轉型為一個開源社群。將來會把更多內部文件公開,以及增加公開的討論區,協作模式也將從同步的會議改為多人的非同步協作。
Linux Odyssey 是我多年以來的夢想。在這一年來的開發,我很幸運有一群夥伴與我一起實現這個夢想,也得到了許多肯定與幫助。在接下來的一年,我希望能與更多人一起打造 Linux Odyssey,使學習 Linux 與指令不再令人畏懼,而是一場有趣又精彩的旅程。