花7.5億都做不好的項目,被三位程序員爸爸重寫並開源了

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"面對 7. 5 億換來一坨技術垃圾,三位程序員用業餘時間開發了一個更好的替代版本。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"斯德哥爾摩官方開發的 Skoplattform 是一款綜合性應用,可爲學生、教師及家長提供及時信息。但結果堪稱災難:1.17 億美元(約 7.5 億人民幣)換來的只是一坨垃圾,平均評分爲 1.2 星。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這款糟糕的應用折磨着衆多父母,其中一位正是軟件開發者 Christian Landgren。於是 Landgren 聯合其他兩位程序員爸爸開發出了一款簡化版應用,並命名爲Öppna Skolplattformen(即開放學校平臺)。顧名思義,這是一款自由開源軟件,託管於 GitHub 之上:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/github.com\/kolplattformen\/skolplattformen","title":"","type":null},"content":[{"type":"text","text":"https:\/\/github.com\/kolplattformen\/skolplattformen"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"家長用業餘時間做了一個更好的版本"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"程序員爸爸 Christian Landgren 實在忍受不了官方校園系統 Skoplattform。這位父親拉扯着三個孩子,每天都得浪費很多寶貴時間才能讓 Skoplattform 正常發揮作用。他被迫翻閱無窮無盡的複雜菜單,瞭解自己的孩子在學校裏究竟幹了什麼。而且跟這些相比,真正要命的是在官方 App 上給孩子請病假。在 2018 年 8 月推出之後的兩年之間,Skolplattform 可以說是讓瑞典首都成千上萬的父母們真正團結了起來。Landgren 坦言,“所有用戶和家長都要氣炸了。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原本這套系統於 2013 年投入使用,希望能讓斯德哥爾摩市 50 萬兒童、教師和家長能生活得更輕鬆一點。該系統希望能覆蓋到教育體系中的所有環節,包括登記出勤、記錄成績等等。該平臺相當複雜,由三大部分、總計 18 個獨立模塊構成,因此由 5 家外部企業共同維護。這個龐大的系統需要支撐 600 所幼兒園和 177 所學校共同使用,每時每刻都有教師、學生和家長在登錄及操作。聽起來還行哈?唯一的問題就是,它根本不起作用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"開發投資超過 10 億瑞典克朗(約合 1.17 億美元)的 Skolplattform 從未能實現其最初目標。家長和教師們抱怨系統太過複雜——包括啓動延遲、項目管理不善,甚至被稱爲一場徹頭徹尾的技術災難。從應用商店就能看到,這款應用的 Android 版本平均得分爲 1.2 星。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/ee\/eec6369490410343837bbe573d341d46.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"於是在 2020 年 10 月 23 日,學生家長、瑞典創新諮詢公司 Iteam 的開發者兼 CEO Landgren,覺得應該主動出擊,親自動手開發一款能用的程序。“這東西用起來太難受了,所以我打算自己動手解決問題。”他寫信給市政官員,要求查看 Skolplattform 的 API 文檔。在等待回覆期間,他登錄了自己的賬戶,並嘗試確定這套系統能否進行逆向工程。在短短几小時內,他就開發出不少實用的功能。“我把來自這套學校平臺的信息直接顯示在自己的應用之內,再以他們糟糕的 API 爲基礎新建另一個 API。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這項自發性工作開始於 2020 年 11 月底,而且就在幾天前官方還剛剛因 Skolplattform 存在“嚴重缺陷”被罰款 400 萬瑞典克朗。瑞典數據監管機構發現該平臺存在嚴重缺陷,導致數十萬家長、兒童及教師的數據暴露在外。在某些情況下,這些個人信息甚至通過 Google 就能直接搜到。(之後缺陷得到快速修復,所以上訴期間罰款數額有所下調。)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在接下來的幾周裏,Landgren 與同樣爲人父母的開發者 Johan Öbrink 和 Erik Hellman 聯手合作,制定了一項開發計劃。他們將打造 Skolplattform 的開源版本,並以 App 的形式發佈給斯德哥爾摩當地飽受折磨的父母們。在 Landgren 早期工作的基礎上,這支小團隊打開 Chrome 中的開發者工具、登錄 Skolplattform,並記錄下所有 URL 及有效載荷。他們還提取了調用平臺私有 API 的代碼並構建成包,以便代碼能夠在手機上運行。總之,他們基本就是在已有的、存在嚴重可用性問題的 Skolplattform 之上新建了一個體驗更好的層。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"他們的成果就是Öppna Skolplattformen,意爲開放學校平臺。這款應用於 2021 年 2 月 12 日發佈,所有代碼均根據開源許可在 GitHub 上發佈。任何人都能獲取並使用代碼,而且用途基本不受限制,如果其他城市想要用這些成果,也沒問題。但市政官員顯然對此並不開心,而是很快做出了憤怒的迴應。甚至早在應用發佈之前,斯德哥爾摩市政府就曾警告 Landgren 此舉可能涉嫌違法。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在接下來的 8 個月裏,斯德哥爾摩市政一直在努力打壓甚至消滅這款開源應用。他們警告家長應停止使用該應用,宣稱它可能會非法訪問用戶的個人信息。官員們還向數據保護機構上報了該應用,Landgren 還提到政府甚至調整了官方系統的底層代碼,防止這款民間分支瓜分其用戶份額。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今年 4 月,市政宣佈由警方介入。官員們表示這款應用以及幾位聯合創始人可能涉嫌數據泄露刑事犯罪,並要求網絡犯罪調查人員深入剖析應用的工作原理。此舉讓一直同市政官員積極會面並解決問題的 Landgren 感到相當意外,“這實在是太可怕了。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"消滅不掉的開源版本:程序員家長實在太強大了"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Öppna Skolplattformen 這款應用本身並不複雜。雖然官方的學校平臺面向瑞典首都一切參與教育的對象(20 萬家長、23500 名教職員工和 14 萬學生)構建,但這款開源方案卻只面向家長。這款售價 1 歐元的應用在 iPhone 與 Android 上得到了 12500 次下載(平均評分爲 4.2 星),而且只顯示最基礎的信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/9e\/9e291c688d259e4ed3fc0ad4f0e586c6.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"家長們使用瑞典數字身份系統 BankID 進行登錄,官方 Skoplattform 同樣使用這套系統。之後,他們就能通過 Skolplattform API 查看孩子們的信息了。這款應用會顯示學校日曆和活動,例如音樂會、學生的每日課程安排、教師通知(鏈接至成績單與新聞更新等)、自助餐廳供應的食物以及報告孩子是否生病等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Öppna Skolplattformen 聯合創始人之一Öbrink 表示,“我們在這裏顯示的一切,都是本就公開的公共信息。”以學生成績爲例,內容只是被呈現在了應用中的瀏覽器上,這款應用本身並不會訪問任何數據。該應用的最初版本確實包含一些可通過官方平臺獲取的父母個人信息,但之後很快被刪除。Öbrink 補充道,“我們只是意外獲得了成功,而且從沒想過要惹什麼麻煩。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"官方呼籲家長們停止使用開源版本,當然,呼籲沒有起作用。另外,官方還委託外部公司 Certezza 對應用中的數據處理方式開展第三方審計。但在審計報告完成後,他們寧願違反透明度法律要求也拒絕公佈具體內容。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最後官方組織決定對 Skolplattform 進行安全更新,阻止任何外部第三方訪問個人數據——於是Öppna Skolplattformen 的自制 API 也就被廢掉。然而 Skoplattform 一更新,Öppna Skolplattformen 就跟着做出響應式更新。3 月,Öppna Skolplattformen 已經更新了 7 次來避免自己的功能遭到官方“破壞”,而後者也在不斷調整其底層系統。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今年 4 月初,市政府要求開發者撤掉 GitHub 上發佈的應用源代碼。4 月 15 日,由 Holmdahl 領導的教育管理部門宣佈正式完成了對這套家長開發系統的調查,並對應用的數據處理機制表示擔憂。該市隨後選擇報警,其Öppna Skolplattformen 及開發商有可能造成了數據泄露事件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Landgren 表示,“他們在報警材料中故意把情況寫得很可怕。”在接下來的幾周內,網絡犯罪調查人員造訪他家,並就開源應用一事進行取證——Landgren 說整個過程讓他一度懷疑自己的工作到底有沒有意義。“人必須在這個時候想明白自己想做什麼、想達成什麼結果。”最終,他決定不斷擴大團隊並繼續推動項目發展,因爲每位成員都堅信自己站在正確的一邊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爭議不斷擴大的同時,Öppna Skolplattformen 的人氣也在增長——包括參與開發的人數激增,總共多達 40 人蔘與,團隊裏包含有設計師、律師和開發人員。這羣志願者不僅僅修正 bug,開發搜索功能,提供不同語言的版本,甚至還指出了官方應用程序的潛在安全問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"隱私與互操作性並不矛盾"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Öppna Skolplattformen 之所以效果良好,是因爲 Landgren 和他的夥伴們對 Skolplattformen 進行了逆向工程,發現了其中私有 API 的 URL 和語法。這聽起來似乎難度很大,但 Web 開發者們每天都在做類似的工作——Landgren 小團隊的主要助力,就是 Chrome 瀏覽器中內置的 Web 開發者工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如今,考慮到 Skolplattformen 中包含大量關於學生、教職員工和家長的敏感信息,斯德哥爾摩市政府希望保證Öppna Skolplattformen 不存在任何收集用戶數據或侵犯用戶隱私的行爲。這方面擔憂完全合理,但不合理的是官方 App 的應對方式,他們的選擇並非安全驗證、而是直接消滅。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲什麼會這樣?我們無法揣測官方的想法,但這裏不妨做出可能的猜測。當警察網絡犯罪部門調查Öppna Skolplattformen 應用時,得出結論“Öppna Skolplattformen 使用的所有信息,均爲斯德哥爾摩市自願發佈的公共信息。”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"報警材料中提到了 Certezza 做出的審計報告,因此可以得出合理結論,該市從一開始就知道他們對 40 名Öppna Skolplattformen 應用志願開發者涉嫌侵犯隱私的指責壓根沒有依據。事實上,這些志願者目前仍在積極查找並上報官方應用中的 bug——這些 bug 才真正有可能導致使用 Skolplattformen 的教師、學生和家長們遭遇隱私外泄。總而言之:官方應用做得如此之爛,他們想到的辦法是打壓做得更好的第三方應用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"社會上把這種行爲稱爲“隱私清洗”,就是以保護隱私爲名義阻止合法的改編、調查與修改。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"舉例來說,Ad Observer 這款應用是由紐約大學編寫用來研究社交平臺廣告的合法性的,Facebook 在向 Ad Observer 宣戰時也啓用了隱私清洗。面對這款由志願者編寫、用於確定 Facebook 是否拿錢散佈虛假信息的插件,媒體巨頭表示其侵犯了用戶隱私。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/wechat\/images\/f0\/f0168a92691d71a0d9144963b91c02de.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隱私清洗的核心前提,在於強調在線服務實體已經是用戶隱私的最佳守護者。但事實一次又一次打了持這種觀點者的臉,Facebook 曾明確表示其有權阻止對廣告內容的獨立審計,但 Cambridge Analytica 事件讓用戶猛然發現自己的數據已經被打包售出。但時至今日,Facebook 仍然擁有這樣的權力;而且即使 Cambridge Analytica 被阻止,我們也很難相信未來不會出現更多類似、甚至更嚴重的隱私危機。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"App 的“互操作性”已經成爲技術培訓保護獨立自主的關鍵所在,也是用戶能夠指望得上的少數可行方案之一。只有這樣,我們才能修復糟糕的審覈策略、信息設計與可訪問性約束。互操作性讓我們避免打上十來年官司才能解決壟斷問題,幫助我們不再對 Facebook 這樣的倒行逆施行爲忍氣吞聲。有了互操作性,我們完全可以脫離 Facebook 並繼續與朋友、家人和社羣保持正常聯繫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"互操作性當然會帶來隱私風險,但沒有互操作性更會造成隱私風險。Facebook 以及其他惡毒攻擊互操作性的企業完全可以在沒有任何第三方操作性支持的情況下濫用我們的隱私信息。Skolplattformen 也是如此,志願者們證明這款官方應用中存在嚴重的安全缺陷。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外,將在線隱私政策與隱私清洗剝離開來不僅完全可行、甚至應該說十分必要。要想在無壟斷的前提下實現數據保護,我們需要建立起獨立的隱私法,規定可以做什麼、不能做什麼。以此爲基礎,再讓包括我們自己、科技企業以及互操作組織在內的各方都嚴格遵守法律所規定的標準。斯德哥爾摩市政府就是這麼做的,他們意識到第三方應用可能侵犯用戶隱私時,合理地開展了審計工作。但接下來他們的路就走歪了,不僅拒絕公佈審計結果、還對開發該應用的志願者展開誹謗與指控。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"他們爲什麼要這麼幹?也許是爲了挽回面子,畢竟砸了那麼多錢開發的官方應用居然還不如民間開發者業餘時間做的同人版本。所以以抹黑爲目的,他們開始處心積慮就數據處理方式大做文章。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"瑞典屬於歐盟國家,所以他們實際上擁有獨立的隱私法,完全可以參考確定像Öppna Skolplattformen 這樣的應用到底有沒有違法。雖然現有 GDPR 並不完美,但至少可以給 Skolplattgormen 等官方應用與Öppna Skolplattformen 等衍生版本提供比較客觀的評判標準。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隱私與互操作性並不矛盾,我們應該要求應用程序開發者們(無論來自官方還是私營部門)始終遵循良好的隱私性、可訪問性與可用性標準,但這世上不存在完美渾圓、無懈可擊的至高標準。總會有一些極端用例、特殊情況遊離於標準之外,缺陷與衝突永遠存在,而我們必須在其中展示自己的觀點與力量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"參考鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.wired.com\/story\/sweden-stockholm-school-app-open-source\/","title":"","type":null},"content":[{"type":"text","text":"https:\/\/www.wired.com\/story\/sweden-stockholm-school-app-open-source\/"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/pluralistic.net\/2021\/11\/09\/skrota-skolplattformen\/","title":"","type":null},"content":[{"type":"text","text":"https:\/\/pluralistic.net\/2021\/11\/09\/skrota-skolplattformen\/"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章