Email me: jollen # jollen.org

more: Jollen 的 Embedded Linux 教育訓練

« December 2011 | (回到Blog入口) | February 2012 »

January 2012 歸檔

January 1, 2012

現今軟體開發的一個重要議題:開源授權與私有授權的混用

文/Jollen Chen(原文刊載於零組件雜誌2012年1月號)

軟體取代硬體成為主流價值

觸控手機與平板電腦的成功,正式宣告軟體與網路時代的來臨,這表示硬體獲利模式時代的結束,以硬體為主的商業模式,成為上一個世代的故事了。軟體是產品開發的主角,這已經是大家所公認的主流價值。

因此,可以看到一個事實,台灣有許多硬體公司,已經將軟體列為重點項目,除了利用軟體提升硬體的價值外,也提供軟體服務的新商業模式。

軟體取代硬體,成為主流價值的時代,有更多非技術面議題需要探討。除了專利問題外,在軟體開發的過程中,還有一個幾乎被遺忘的重要議題,在這裡與大家分享。

一個非技術面議題

現今市場上流通的產品,有很高的比例都是採取開放平臺與開源軟體。我們都知道,軟體太重要了,所以企業開始大量投入軟體研發。但與其說是「軟體研發」,不如說是「軟體工程」;因為,這些軟體有相當高的比例都是開放平臺或開放源碼,意思是,絕大多數,甚致是全部的軟體,都是取之於他人(透過網路),而非自行「研究」與「開發」,所以事實是,我們都是在他人的基礎之上做工(工程)。

也就是說,現今企業「從零開始」開發真正私有程式碼的比例變得相當低。從產品的角度來看,可能有99%的程式碼都是外來,例如,使用Google提供的Android程式碼;又如,網路上數以萬計的開放原始碼計畫 (Open source software)。可能只有1%或更低的比率,是私有的程式碼。

因此,我們將產品上的程式碼分為「公眾財」與「私有財」二大類。開放源碼採用的 GPL 或 Apache 是屬於一種公眾財概念的授權 (License),無論是取得、散佈、重製或修改等,都要遵守授權規劃。例如:Linux 核心的修改必須遵守 GPL (Version 2) 的授權聲明,確實公開原始程式碼。過去一些企業經常採用「Delay Open」,即產品發佈後,儘量托延公開程式碼的時間,但 [這個做法可能仍有一些疑慮]。

透過一些「軟體架構設計」的方式,可以讓企業在公眾財的程式碼裡,加入「私有財」的程式碼。私有財的程式碼,完全由開發商自行撰寫授權條款,即授權方式是自行決定,而不是採用公眾財授權。例如,Android 的 HAL 架構,便具備這樣的空間。架構設計,有時並不只在解決技術問題,有些也在解決一些關鍵的非技術問題。

從以上的說明可以發現,開源軟體的公眾財授權,以及企業為了保護智慧財產權必須採取的私有財授權,以及二者的混合,必須有一定的架構設計,才不致於面臨法律問題,這是台灣業者過去這一年來,普遍忽視的議題。從現況來看,筆者為大陸企業提供這方面建議與咨詢服務已經有一段時間了,台灣業者在這個議題上,仍需加緊腳步。

Happy New Year 2012 !

January 17, 2012

[教育訓練紀錄] Android 4.0 移植與框架課程:會後小記與學習建議

上週三 (1/11) 舉辦的「Ice Cream Sandwich (Android 4.0) 移植與框架」課程,參與情況相當踴躍,覺得非常的感動。所以當然也要使出渾身解數,回報大家的支持。這次的課程有一個比較特別的地方,就是在一些移植工作上,筆者特別將 Android 4.0 的移植工作與 Android 2.3 做比較。

由於 Android 4.0 移植,可以基於 Android 2.3 甚致 Android 3.0 來進行,所以並不需要「從零開始」。基於過去的 Android 移植經驗,可以完成大約 80% 左右的 Android 4.0 移植工作。從學習的角度來看,因為 2.3 與 4.0 的移植技術很許多相同的地方,例如:Product tree 的製作完全相同,因此實際了解 2.3 與 4.0 的「差異」是比較有效率的作法。

另外,同樣是從學習的角度來看。如果是 Android 移植的入門新手,一開始不太需要區分版本,由 Android 2.3 移植開始,也是一個很好的入門點,這會讓學習更單純,例如:不需要考慮 InputReader 的修改;這個專門針對 Android 4.0 的移植工作,未來再補上即可。

Android 4.0 的 20%

Android 移植工作,可以區分為二個部份:

• Bring-up
• 周邊移植

Bring-up 指的是「想辦法做到可以開機」,這是移植的第一個重要 Milestone。在開機完成後,再接著處理周邊,例如:Wi-Fi、感測器等。

這次的課程,總共有三位講師。筆者主要負責「Bring-up」的部份,也就是整理如何將 Android 4.0 做到可以開機,課程內容的規劃,鎖定在這「20%」的不同。「可開機」的定義是可以看到 Android 的桌面環境。課堂上,筆者提到了幾個「可開機」的關鍵:

• Kernel configs
• Software rendering
• InputReader (Android) 與 Input device driver (kernel)

接下來的課程紀錄,將會針對每一個關鍵做一個整理。雖然面對不同硬體,Android 4.0 移植工作仍會有些小差異,不過只要處理好這三大關鍵,幾乎都可以成功開機。

January 19, 2012

HTML5在手持裝置將開始爆發式成長

文/Jollen Chen(原文刊載於 CTimes零組件雜誌2012年2月號)

HTML5標準將開始大舉進入行動裝置市場,這是今年的手機技術重頭戲。撰寫手機App現在有二種選擇了。第一種做法是典型的做法,也就是Native App的開發方式,採用Java或C程式語言撰寫App,在編譯後安裝至手機運行。這種做法的主要缺點是,不跨平臺,也就是,針對Android手機、iPhone機等,都必須各自發展一份程式碼。

第二種做法就是HTML5的做法,採用HTML5標準開發App,有點像是在設計網頁,或是撰寫Web應用程式。可以想像,以後只要把網頁或Web應用程式封裝成App後,就能直接安裝至手機運行。這種做法解決了Native App不能跨平臺的缺點。

我們可以這樣解釋,不管使用什麼作業系統或瀏覽器,都可以瀏覽網頁,所以網頁與Web應用程式本身,都是跨平臺的。同樣地,不管你是使用什麼手機,也不管手機使用的是什麼作業系統,都可以運行同一份HTML5的手機App。

HTML5將要在手持裝置域,呈現大爆發式的成長;因此,有三項關鍵技術,不可不知。

第一、使用HTML5+CSS+JavaScript撰寫Web應用。HTML5是網頁標籤語言的標準,當然,單單使用HTML5並不能開發應用程式,必須搭配CSS與JavaScript來使用。因此,HTML5+CSS+JavaScript就是「HTML5 App」的基礎建設。有些網頁上面有很棒的特效,例如:轉場效果,這些都可以透過JavaScript來完成。

另外,jQuery也是不可或缺的技術。jQuery已經相當的有名,就不必再多說了。直接撰寫JavaScript可能有時很麻煩,這時可以使用jQuery以及眾多的jQuery plugins來完成。

第二、JavaScript引擎的成熟度是關鍵。要在手機上運行HTML5的App,因為將會使用到許多JavaScript程式碼,所以JavaScript的引擎成熟度,以及它的效能是主要關鍵。安裝在手持裝置上的JavaScript 引擎,將成為手持裝置的重要技術。

Android系統早期使用的 JavaScript 引擎稱為 JavaScriptCore (JSC),JSC 包含在 webkit 中。因為一些原因,Google 也決定開發自已的 JavaScript 引擎,稱之為 V8。技術上,新一代的 V8 引擎效能比 JSC 引擎更好。最新的 Ice Cream Sandwich 已經全面採用 V8 引擎了。V8 引擎的編譯基礎技術稱為 Crankshaft,這項技術可以很有效地改善JavaScript應用程式的效能。

第三、PhoneGap潛力驚人。目前,已經有非常多的App開發者,使用知名的開放源碼專案 PhoneGap,來開發者HTML5的手機App。大家都知道,Adobe已經宣佈放棄行動版的Flash,但是,有一個重要的事情是DreamWaver 5.5。DreamWaver 5.5 的特色之一就是加入 PhoneGap 的支援。

DreamWaver 5.5可以做到令人興奮的一個功能。設計師可以使用DreamWaver 5.5把設計好的「Web」直接封裝成手機Android App,並安裝至手機。不但如此,封裝出來的App還可以上架到Android Market上。

從種種跡象顯示,HTML5+CSS+JavaScript確實已經成為應用軟體開發商的另外一個選擇了。各大作業系統JavaScript引擎的成熟,以及DreamWaver宣佈支援 PhoneGap,還有PhoneGap專案的快速發展,這些現象告訴我們,HTML5標準在手持裝置領域,將開始有爆發式的成長。

January 31, 2012

[教育訓練紀錄] 如何成功 Android 4.0 移植, #1: 三個常見的kernel configs問題

延續「Ice Cream Sandwich (Android 4.0) 移植與框架」課後紀錄,與大家分享一些Android 4.0的移植經驗。移植Android 4.0的第一個階段稱為Bring-up,簡單說,就是要想辦法將Android放到硬體上,並且要能成功開機。

影響是否能Bring-up的關鍵之一,就是kernel的設定。因為驅動程式的關係, 一般認為,使用Linux 3.0系列是比較好的做法。不過,2.6.3x或3.x的版本,都能支援Android 4.0。在這次的課程裡,筆者使用了三個平臺。第一個是MagicLEGO計畫所開發的MagicLEGO開發板,MagicLEGO使用三星的Exynos 4210雙核心處理器。第二個是長高科技開發的DMA-210L開發板,最後一個是devkit8000,這是一個BeagleBoard的複製品。

以上三個平臺,就kernel configs層面來說,需要打開的項目,大約有80%左右的共通性。以下,整理針對執行Android 4.0必要的kernel configs,相信對仍在進行移植工作的朋友,會有一些幫助。

首先,先介紹三個Android 4.0的特性:

● Android 4.0使用Early Suspend

● Android 4.0不支援Virtual Framebuffer

● Android 4.0使用Quota v2

Android 4.0的Surfaceflinger使用到early suspend功能,因此必須將kernel的Early suspend能打開。接著,在Bring-up階段,我們採取穩健做法,先使用Software rendering的方式,讓Android能成功開機,後續再考慮硬體加速的部份。

在Kernel支援Virtual framebuffer的環境下,Software rendering並不能完全正常運作,因此,必須將kernel的Virtual framebuffer功能關閉。另外,Software rendering的方式,將會透過Kernel的framebuffer驅動程式進行繪圖,這部份後續再做說明。

Quota v2是kernel的「netlink」功能,Android的netd會使用到netlink,在設定kernel時,也要將這個功能開啟。以上整理的三個重點,特別是netlink的設定,很頻繁地出現在網路上的論壇,可見這是移植Android 4.0初期經常遇到的問題。

延伸閱讀

移植 Android 4.0 到 Devkit8000 開發板 (OMAP3),只能開機、沒有硬體加速
[教育訓練紀錄] Android 4.0 移植與框架課程:會後小記與學習建議

關於 January 2012

此頁面包含了在January 2012發表於Jollen's Blog的所有日記,它們從老到新列出。

前一個存檔 December 2011

後一個存檔 February 2012

更多信息可在 主索引 頁和 歸檔 頁看到。

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org