開源網頁聊天室、視訊(1) matrix.org介紹
RiotChat是一款新的網路聊天室(含網路電話VIOP視訊功能)應用程式,它能跨平台使用(含蘋果與安卓手機),以開源方式讓任何人審核其程式碼,也能讓用戶透過自行架站方式來保留保護(個人)資料數據。據稱它是應用matrix技術所開發的應用。
Matrix is an open standard for interoperable, decentralised, real-time communication over IP. It can be used to power Instant Messaging, VoIP/WebRTC signalling, Internet of Things communication - or anywhere you need a standard HTTP API for publishing and subscribing to data whilst tracking the conversation history.
我完全不懂技術方面的東西,不過看到matrix 提到的「decentralised」分散化特性,讓我想起一年多前自己寫過的「分散式社交網路試用20150421」一文。上世代進入web 2.0的中後半段,myspace, facebook,twitter等社交網站興起,另有一群長年參與自由軟體運動的開發者擔心這種集中封閉(原始碼未開放)的社交網路,恐怕有某些潛在使用風險,如用戶的資料保護、平台對用戶言論審查刪除等問題,於是有人發起另類開源的社交網站軟體工具開發使用,如對應facebook的diaspora ,對應twitter的pump.io/ GNU social 等,二個後者都強調其「decentralised」特性,可讓用戶下載架站程式安裝在自己的機器上,成為community pod/federation,各自再組合成一個互聯網當中彼此連結的社群網絡。例如有人利用GNU social,建置了quitter.se,提供給網路使用者在此免費申請使用類似twitter的微網誌服務(microblog)。quitter.se的用戶,不僅能追踪訂閱quitter.se上的其它用戶動態,也能與其它GNU social federation(有點類似像另一台伺服器主機的意思吧)上的用戶互動。例如我在quitter.se這台機器(或網域名)有一個GNU Social帳號,可以(remove follow)訂閱Electronic Frontier Foundation在另一台機器 quitter.no的 GNU Social帳號,這樣EFF的訊息就會出現在我個人quitter.se(社交)閱讀的時間流中。不過目前我還沒找到電腦上有什麼Client或服務平台利用API把自己在twitter所訂閱對象的發文抓到GNU social的方法(或是反之將GNU Soical納入其整合社交網路的服務串流),倒是有一兩款手機app,可以利用多重帳戶來閱讀推文,但基本上還是二條時間流),所以目前我得分別在quitter.se/twitter閱讀各自帳戶中所訂閱追踪者發佈的公開狀態訊息。雖然GNU Social上的用戶不多,且幾乎沒什麼那種所謂明星級的推特大戶會另開GNU Social帳戶(是有些人/組織利用機器人方式把推文轉到GNU social帳號),但我個人頗認同建站者的宣言,所以我個人的推文大都是先透過quitter.se發佈再轉發到推特上面。
Using Quitter is political, not a conscious consumer choice. But it is not a protest. We think of it as a kind of non-violence, where the means are at the same time ends. We are trying to change the world by simply start acting the way we want it to be. We’re here, we’ve quit!
回到matrix,我想它的理念應該也是類似這樣一種分散式、去集中化的態度。雖然當前有microsoft skype, google hangout這些超大企業提供的網路視訊會議、網路聊天功能,但它們多半基於商業版權理由,未公開其程式碼,也很可能在他們管理的伺服器保留了用戶私人聊天的內容或訊息本身的matadata。當有這些不盡合理現象就會出現反撲或是另類的軟體服務,例如強調OTR encryption的語音視訊軟體jisti 、踦平台的即時通訊signal等等。不過這似乎是我第一個知道,有開發者把伺服器架設的權力都釋放開源的WebRTC應用。
Matrix 運作原理
官網上有一個簡單但清楚的小動畫說明,我稍把它拆解如下:
0)如第一張圖表,目前網路上有三台伺服器主機,分別是alice.com, bob.com, charlie.com
1)Alice從本地端電腦傳送出一則json格式的訊息(紅點1)到了主機(alice.com)
2)alice.com機器上安裝了matrix(matrix.alice.com),故matrix將透網頁溝訊協議的加密網路層(HTTPS)來傳送此json格式的訊息給同樣使用matrix以參與同一個聊天室的其它機器(matrix.bob.com; matrix.charlie.com)
3)訊息最終接收方(多點Bob, Charlie),則透過自己電腦(手機)上安裝的各式應用來向自己註冊的機器進行long-live GET request以在聊天室中讀到來自alice.com傳來的訊息。
4)假設同一個聊天室中的Bob要回應Alice的訊息(綠點2),則bob.com這台機器同樣透過1)方式將其回應送到這個聊天室。
5)而在另一個機器註冊用戶Charlie也想回應Alice的訊息(藍點3),也是一樣透過1)傳到此聊天室,此時Matrix得再次上場來協調與記錄備份不同機器傳來訊息。
6)Bob的訊息(綠點2)同樣透過2)伺服器中繼傳到了同一個聊天室的三部機器上,此時這台機器上都留下了(紅點1-綠點2)之間的聊天記錄,而藍點3尚未傳到其它二台機器上,故在matrix.charlie.com機器上的聊天記錄暫時稍與matrix.bob.com; matrix.alice.com 不同,可以看到它將這串聊天的訊息以分開方式呈現。
7)所以接下來換Charile的訊息(藍點3)透過同前2) 中繼傳到同一聊天室的其它二台機器故此時三部機器的聊天室記錄(紅點1-子分枝綠點2-子分枝藍點3)這樣的記錄結構
8)好了,現在Alice因為有進行3)long-live GET reques,她讀到了Bob. Charlie的回應訊息,並再次透過2)再送出一則回應。
9)接下來就是繼續重覆前面的方式程式,來協調不同機器的訊息讀取與傳送。
我自己幾天來使用riot.im 的感覺有點像是網頁版的IRC(詳細的介面使用會再另文介紹),而在matrix官網上的問答集中,matrix即表示它與IRC有許多差異:
Text only No history No multiple-device support No presence support Fragmented identity model No open federation No standard APIs, just a rather limited TCP line protocol Non-standardised federation protocol No built-in end-to-end encryption Disruptive net-splits Non-extensible
就一般的使用者來說,我個人還蠻同意所列前二個IRC聊天室的不足之處。
前面提到目前主流商業封閉通訊軟體或語音視訊軟體外,仍有不少開發者另投入推出強調更好的加密保護的通訊軟體,如我之前曾初步進行正體中文化的umbrella app其上有一些介紹。其中不少通訊軟體都是使用XMPP(Extensible Messaging and Presence Protocol)協議。matrix表示,之前開發團隊也是先利用XMPP來協助處理文字訊息通訊,但後來為了改善在瀏覧器上更友善使用的環境,以及能整合支援其它外掛功能,故Matrix 後來改採利用HTTP API 以及pub/sub語意的JSON資料庫來建構它的文字聊天系統。
目前以matrix協議開發的客戶端應用有:
1) weechat: 純文字介面,感覺比較像是一款IRC聊天工具
2) Riot: 透過瀏覧器登入使用的網頁聊天室與語音視訊平台
3) Riot for iOS
4) Riot for Android
以上先簡單整理matrix的理念與基本原理,在下一篇文章我會先介紹Matrix客戶端應用2)瀏覧器版與4)Android版Riot.im介面環境,無聊的話再試試weechat的使用。最後,如果技術能力夠成功把matrix安裝在自己的電腦上,就再多寫一篇如果安裝matrix server的記錄。