最近的工作開始跟Linux扯上關係,有預感總有一天會被逼著在Linux寫些整合用的小程式... orz

十年前唸碩士的時候,一個實驗室畢業學長做起了壓Linux CD販售的生意,送了老板一片他在經銷的Slackware Linux光碟,當年Linux才剛冒出頭,紅帽子可能連毛線都沒開始織,Linux還沒開始受到世人的關注,那塊光碟就一直被留在實驗室桌上。好奇心重又手賤的我,不甘心系上的幾台DEC/Sun UNIX系統只有某幾間實驗室的同學才能把玩,就找來機器裝上Slackware Linux,過過當UNIX root的乾癮,從Apache, Sendmail, Samba一路玩下去,當年翻譯了一篇Firewall & Proxy HOW-TO目前還在Internet上流傳呢! 這是我與UNIX世界的第一次接觸。

進入職場沒多久,只會Delphi, VB, SQL的小菜鳥,接到的第一案子居然是要在SGI UNIX主機上寫查ORACLE資料庫的Web UI… 最後拼了老命,臨時抱佛腳學會了Perl,不會直接連ORACLE,就Call sqlplus讀入即時產生的SQL指令檔,再把結果Dump成Text File收回來(天殺的,能想出這種鋸箭法,我一定是天才)。總之,驚險過關後,逐漸聚焦到MS Solution上,與UNIX世界的緣份愈來愈淡...

最近的案子開始接觸一些Linux主機,有些時候從架構師的角度,在Linux端放個小程式會比在Windows端費盡心機省力而有效十倍以上。但不會C語言一直是我的痛腳(Achilles’ Heel),Perl雖然堪用,但荒廢已久,要用也少不了一番查查找找,如何在Linux上寫程式呢? 最後我想起了可愛的小猴子—Mono

重入Fedora Core 6,感覺Linux已與當年大不相同,不管是Gnome或KDE,都直追Windows的友善度(居然還可以直接連上Windows的分享資料夾讓我大為驚嘆)。不過,安裝Mono RPM時卻一直卡在Dependence Library不齊,讓人很挫折,開始懷念Windows式Setup.EXE下一步、下一步的爽快感。還好,在http://www.mono-project.com/Downloads裡有個Linux Installer for x86,讓Windows世界來的麻瓜可以用下一步、下一步的方式做完這段苦工。

裝好Mono之後,依著網路上找到的Tutorial,寫了一小段hello.cs,用XmlDocuemnt, StringBuilder, Thread.Sleep, System.Text.Encoding, StreamWriter... 幾個基本的.NET功能。用mcs就編譯出hello.exe,再用mono hello.exe執行。

天哪,結果就如預期地顯示在Ptty上,當場感動到不行~~~ 

我會寫Linux程式了! 我會寫Linux程式了! 我會寫Linux程式了! 我會寫Linux程式了!

很有意思的一個問題是,用MONO Build出來的hello.exe,可以拿到Windows上執行嗎?  以我這個簡單的小程式來說,答案是Yes!!  這同時也代表直接把Windows上的.NET EXE檔搬到Linux上跑將不是神話! 不過,也別高興得太早,Mono並沒有實作出全部.NET的基本物件,關於Windows Form的部分,也會因為Windows與XWin的根本差異而必須用特殊的Namespace下的不同物件達成,因此要做到100%通透,目前還有段距離。

只是,可以用熟悉的C#語言寫程式在Linux上跑,.NET Developer自此擺脫"出了國就得當啞巴"的宿命,這種興奮的感受無可取代!! Thank you! Mono!


Comments

# by karron

fedora系列的linux可以用yum来安装软件,会自动解决依赖问题. debian/ubuntu系列可以用apt-get安装软件,这些都会自动解决依赖问题. 比windows的下一步下一步还要方便.

# by chicken

mono 不錯 (Y), 不過 .net 有些東西是透過 Interop 包出來的, 這部份就沒辦法...

# by Jeffrey

To Karron, 謝謝您的資訊,我猜我曾經糊里糊塗地啟用了YUM,桌面上會出現很長一段時間檢查Dependence及下載的對話框,也許是VM的速度不佳、也許是我的耐心不足,或者是下載來源的網路不怎麼快,好幾次都讓我等不下去(大約等了快半小時)而把它關掉。不過,您說的沒錯,如果一切順利時,YUM應該可以自動補齊欠缺的套件,這點很神奇。 Windows Style的SETUP通常會把所有必須的零組件封裝在安裝程式包中(有時是因為不附上,網路上也沒得抓),跟Linux安裝的哲學不太相同,這點對我來說有待適應。 Jeffrey

# by elleryq

Windows form 在 .net 1.1 的實做上,算是已經有 70%~80% 的成熟度了。 除了 c# 以外,vb.net, jscript, ironpython 也都可以在上面跑~甚至,你在 windows 上編譯好,丟到 linux 上也可以跑~

Post a comment