HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

花 7.5 亿都做不好的项目,被三位程序员爸爸重写并开源了

  • 2021-11-11
  • 本文字数:4773 字

    阅读完需:约 16 分钟

花7.5亿都做不好的项目,被三位程序员爸爸重写并开源了

面对 7. 5 亿换来一坨技术垃圾,三位程序员用业余时间开发了一个更好的替代版本。


斯德哥尔摩官方开发的 Skoplattform 是一款综合性应用,可为学生、教师及家长提供及时信息。但结果堪称灾难:1.17 亿美元(约 7.5 亿人民币)换来的只是一坨垃圾,平均评分为 1.2 星。


这款糟糕的应用折磨着众多父母,其中一位正是软件开发者 Christian Landgren。于是 Landgren 联合其他两位程序员爸爸开发出了一款简化版应用,并命名为Öppna Skolplattformen(即开放学校平台)。顾名思义,这是一款自由开源软件,托管于 GitHub 之上:


https://github.com/kolplattformen/skolplattformen


家长用业余时间做了一个更好的版本


程序员爸爸 Christian Landgren 实在忍受不了官方校园系统 Skoplattform。这位父亲拉扯着三个孩子,每天都得浪费很多宝贵时间才能让 Skoplattform 正常发挥作用。他被迫翻阅无穷无尽的复杂菜单,了解自己的孩子在学校里究竟干了什么。而且跟这些相比,真正要命的是在官方 App 上给孩子请病假。在 2018 年 8 月推出之后的两年之间,Skolplattform 可以说是让瑞典首都成千上万的父母们真正团结了起来。Landgren 坦言,“所有用户和家长都要气炸了。”


原本这套系统于 2013 年投入使用,希望能让斯德哥尔摩市 50 万儿童、教师和家长能生活得更轻松一点。该系统希望能覆盖到教育体系中的所有环节,包括登记出勤、记录成绩等等。该平台相当复杂,由三大部分、总计 18 个独立模块构成,因此由 5 家外部企业共同维护。这个庞大的系统需要支撑 600 所幼儿园和 177 所学校共同使用,每时每刻都有教师、学生和家长在登录及操作。听起来还行哈?唯一的问题就是,它根本不起作用。


开发投资超过 10 亿瑞典克朗(约合 1.17 亿美元)的 Skolplattform 从未能实现其最初目标。家长和教师们抱怨系统太过复杂——包括启动延迟、项目管理不善,甚至被称为一场彻头彻尾的技术灾难。从应用商店就能看到,这款应用的 Android 版本平均得分为 1.2 星。



于是在 2020 年 10 月 23 日,学生家长、瑞典创新咨询公司 Iteam 的开发者兼 CEO Landgren,觉得应该主动出击,亲自动手开发一款能用的程序。“这东西用起来太难受了,所以我打算自己动手解决问题。”他写信给市政官员,要求查看 Skolplattform 的 API 文档。在等待回复期间,他登录了自己的账户,并尝试确定这套系统能否进行逆向工程。在短短几小时内,他就开发出不少实用的功能。“我把来自这套学校平台的信息直接显示在自己的应用之内,再以他们糟糕的 API 为基础新建另一个 API。”


这项自发性工作开始于 2020 年 11 月底,而且就在几天前官方还刚刚因 Skolplattform 存在“严重缺陷”被罚款 400 万瑞典克朗。瑞典数据监管机构发现该平台存在严重缺陷,导致数十万家长、儿童及教师的数据暴露在外。在某些情况下,这些个人信息甚至通过 Google 就能直接搜到。(之后缺陷得到快速修复,所以上诉期间罚款数额有所下调。)


在接下来的几周里,Landgren 与同样为人父母的开发者 Johan Öbrink 和 Erik Hellman 联手合作,制定了一项开发计划。他们将打造 Skolplattform 的开源版本,并以 App 的形式发布给斯德哥尔摩当地饱受折磨的父母们。在 Landgren 早期工作的基础上,这支小团队打开 Chrome 中的开发者工具、登录 Skolplattform,并记录下所有 URL 及有效载荷。他们还提取了调用平台私有 API 的代码并构建成包,以便代码能够在手机上运行。总之,他们基本就是在已有的、存在严重可用性问题的 Skolplattform 之上新建了一个体验更好的层。


他们的成果就是Öppna Skolplattformen,意为开放学校平台。这款应用于 2021 年 2 月 12 日发布,所有代码均根据开源许可在 GitHub 上发布。任何人都能获取并使用代码,而且用途基本不受限制,如果其他城市想要用这些成果,也没问题。但市政官员显然对此并不开心,而是很快做出了愤怒的回应。甚至早在应用发布之前,斯德哥尔摩市政府就曾警告 Landgren 此举可能涉嫌违法。


在接下来的 8 个月里,斯德哥尔摩市政一直在努力打压甚至消灭这款开源应用。他们警告家长应停止使用该应用,宣称它可能会非法访问用户的个人信息。官员们还向数据保护机构上报了该应用,Landgren 还提到政府甚至调整了官方系统的底层代码,防止这款民间分支瓜分其用户份额。


今年 4 月,市政宣布由警方介入。官员们表示这款应用以及几位联合创始人可能涉嫌数据泄露刑事犯罪,并要求网络犯罪调查人员深入剖析应用的工作原理。此举让一直同市政官员积极会面并解决问题的 Landgren 感到相当意外,“这实在是太可怕了。”


消灭不掉的开源版本:程序员家长实在太强大了


Öppna Skolplattformen 这款应用本身并不复杂。虽然官方的学校平台面向瑞典首都一切参与教育的对象(20 万家长、23500 名教职员工和 14 万学生)构建,但这款开源方案却只面向家长。这款售价 1 欧元的应用在 iPhone 与 Android 上得到了 12500 次下载(平均评分为 4.2 星),而且只显示最基础的信息。



家长们使用瑞典数字身份系统 BankID 进行登录,官方 Skoplattform 同样使用这套系统。之后,他们就能通过 Skolplattform API 查看孩子们的信息了。这款应用会显示学校日历和活动,例如音乐会、学生的每日课程安排、教师通知(链接至成绩单与新闻更新等)、自助餐厅供应的食物以及报告孩子是否生病等。


Öppna Skolplattformen 联合创始人之一Öbrink 表示,“我们在这里显示的一切,都是本就公开的公共信息。”以学生成绩为例,内容只是被呈现在了应用中的浏览器上,这款应用本身并不会访问任何数据。该应用的最初版本确实包含一些可通过官方平台获取的父母个人信息,但之后很快被删除。Öbrink 补充道,“我们只是意外获得了成功,而且从没想过要惹什么麻烦。”


官方呼吁家长们停止使用开源版本,当然,呼吁没有起作用。另外,官方还委托外部公司 Certezza 对应用中的数据处理方式开展第三方审计。但在审计报告完成后,他们宁愿违反透明度法律要求也拒绝公布具体内容。


最后官方组织决定对 Skolplattform 进行安全更新,阻止任何外部第三方访问个人数据——于是Öppna Skolplattformen 的自制 API 也就被废掉。然而 Skoplattform 一更新,Öppna Skolplattformen 就跟着做出响应式更新。3 月,Öppna Skolplattformen 已经更新了 7 次来避免自己的功能遭到官方“破坏”,而后者也在不断调整其底层系统。


今年 4 月初,市政府要求开发者撤掉 GitHub 上发布的应用源代码。4 月 15 日,由 Holmdahl 领导的教育管理部门宣布正式完成了对这套家长开发系统的调查,并对应用的数据处理机制表示担忧。该市随后选择报警,其Öppna Skolplattformen 及开发商有可能造成了数据泄露事件。


Landgren 表示,“他们在报警材料中故意把情况写得很可怕。”在接下来的几周内,网络犯罪调查人员造访他家,并就开源应用一事进行取证——Landgren 说整个过程让他一度怀疑自己的工作到底有没有意义。“人必须在这个时候想明白自己想做什么、想达成什么结果。”最终,他决定不断扩大团队并继续推动项目发展,因为每位成员都坚信自己站在正确的一边。


争议不断扩大的同时,Öppna Skolplattformen 的人气也在增长——包括参与开发的人数激增,总共多达 40 人参与,团队里包含有设计师、律师和开发人员。这群志愿者不仅仅修正 bug,开发搜索功能,提供不同语言的版本,甚至还指出了官方应用程序的潜在安全问题。


隐私与互操作性并不矛盾


Öppna Skolplattformen 之所以效果良好,是因为 Landgren 和他的伙伴们对 Skolplattformen 进行了逆向工程,发现了其中私有 API 的 URL 和语法。这听起来似乎难度很大,但 Web 开发者们每天都在做类似的工作——Landgren 小团队的主要助力,就是 Chrome 浏览器中内置的 Web 开发者工具。


如今,考虑到 Skolplattformen 中包含大量关于学生、教职员工和家长的敏感信息,斯德哥尔摩市政府希望保证Öppna Skolplattformen 不存在任何收集用户数据或侵犯用户隐私的行为。这方面担忧完全合理,但不合理的是官方 App 的应对方式,他们的选择并非安全验证、而是直接消灭。


为什么会这样?我们无法揣测官方的想法,但这里不妨做出可能的猜测。当警察网络犯罪部门调查Öppna Skolplattformen 应用时,得出结论“Öppna Skolplattformen 使用的所有信息,均为斯德哥尔摩市自愿发布的公共信息。”


报警材料中提到了 Certezza 做出的审计报告,因此可以得出合理结论,该市从一开始就知道他们对 40 名Öppna Skolplattformen 应用志愿开发者涉嫌侵犯隐私的指责压根没有依据。事实上,这些志愿者目前仍在积极查找并上报官方应用中的 bug——这些 bug 才真正有可能导致使用 Skolplattformen 的教师、学生和家长们遭遇隐私外泄。总而言之:官方应用做得如此之烂,他们想到的办法是打压做得更好的第三方应用。


社会上把这种行为称为“隐私清洗”,就是以保护隐私为名义阻止合法的改编、调查与修改。


举例来说,Ad Observer 这款应用是由纽约大学编写用来研究社交平台广告的合法性的,Facebook 在向 Ad Observer 宣战时也启用了隐私清洗。面对这款由志愿者编写、用于确定 Facebook 是否拿钱散布虚假信息的插件,媒体巨头表示其侵犯了用户隐私。



隐私清洗的核心前提,在于强调在线服务实体已经是用户隐私的最佳守护者。但事实一次又一次打了持这种观点者的脸,Facebook 曾明确表示其有权阻止对广告内容的独立审计,但 Cambridge Analytica 事件让用户猛然发现自己的数据已经被打包售出。但时至今日,Facebook 仍然拥有这样的权力;而且即使 Cambridge Analytica 被阻止,我们也很难相信未来不会出现更多类似、甚至更严重的隐私危机。


App 的“互操作性”已经成为技术培训保护独立自主的关键所在,也是用户能够指望得上的少数可行方案之一。只有这样,我们才能修复糟糕的审核策略、信息设计与可访问性约束。互操作性让我们避免打上十来年官司才能解决垄断问题,帮助我们不再对 Facebook 这样的倒行逆施行为忍气吞声。有了互操作性,我们完全可以脱离 Facebook 并继续与朋友、家人和社群保持正常联系。


互操作性当然会带来隐私风险,但没有互操作性更会造成隐私风险。Facebook 以及其他恶毒攻击互操作性的企业完全可以在没有任何第三方操作性支持的情况下滥用我们的隐私信息。Skolplattformen 也是如此,志愿者们证明这款官方应用中存在严重的安全缺陷。


另外,将在线隐私政策与隐私清洗剥离开来不仅完全可行、甚至应该说十分必要。要想在无垄断的前提下实现数据保护,我们需要建立起独立的隐私法,规定可以做什么、不能做什么。以此为基础,再让包括我们自己、科技企业以及互操作组织在内的各方都严格遵守法律所规定的标准。斯德哥尔摩市政府就是这么做的,他们意识到第三方应用可能侵犯用户隐私时,合理地开展了审计工作。但接下来他们的路就走歪了,不仅拒绝公布审计结果、还对开发该应用的志愿者展开诽谤与指控。


他们为什么要这么干?也许是为了挽回面子,毕竟砸了那么多钱开发的官方应用居然还不如民间开发者业余时间做的同人版本。所以以抹黑为目的,他们开始处心积虑就数据处理方式大做文章。


瑞典属于欧盟国家,所以他们实际上拥有独立的隐私法,完全可以参考确定像Öppna Skolplattformen 这样的应用到底有没有违法。虽然现有 GDPR 并不完美,但至少可以给 Skolplattgormen 等官方应用与Öppna Skolplattformen 等衍生版本提供比较客观的评判标准。


隐私与互操作性并不矛盾,我们应该要求应用程序开发者们(无论来自官方还是私营部门)始终遵循良好的隐私性、可访问性与可用性标准,但这世上不存在完美浑圆、无懈可击的至高标准。总会有一些极端用例、特殊情况游离于标准之外,缺陷与冲突永远存在,而我们必须在其中展示自己的观点与力量。


参考链接:


https://www.wired.com/story/sweden-stockholm-school-app-open-source/


https://pluralistic.net/2021/11/09/skrota-skolplattformen/


2021-11-11 09:197327

评论 1 条评论

发布
用户头像
至少人家还有开放api
2022-04-29 07:49
回复
没有更多了
发现更多内容

基于SpringCloud,支持安卓、IOS、包含前后端等等完整网约车项目

Java架构追梦

Java 架构 面试 SpringCloud 网约车项目

《Redis 核心技术与实战》学习笔记 05

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

我在阿里实习做开源

apache/dubbo-go

微服务 程序人生 云原生 dubbo dubbogo

所谓生产力

ES_her0

3月日更

一些人的某些目标

sadhu

生涯规划 职业规划 个人提升

好想做个女孩子,编程第一步,女装身上穿

GitHub指北

正则表达式的使用与匹配原理解析

Guanngxu

正则表达式

寻找被遗忘的勇气(二十)

Changing Lin

3月日更

2021年Java春招高级面试指南(1到5年Java面试者必备)

比伯

Java 编程 架构 面试 程序人生

数据库备份真的很重要!很重要!很重要!

xiezhr

oracle sql MySQL 运维 数据备份

GitOps | 一种云原生的持续交付模型

xcbeyond

CI/CD gitops 3月日更

源码分析-Netty: 高性能之道

程序员架构进阶

Netty RPC 源码剖析 28天写作 3月日更

打通Jira与钉钉和企业微信不再难

跟YY哥学Jira

钉钉 Jira 企业微信 automation

MySQL如何选择主键

架构精进之路

MySQL 3月日更

初识Golang之调用方法

Kylin

3月日更 Go 语言

避免失控:谈谈人与人交往中的恶

boshi

职场 心理 七日更

这些面试题你会吗?6年菜鸟开发面试字节跳动安卓研发岗,复习指南

欢喜学安卓

android 程序员 面试 移动开发

一口气面了腾讯两个部门!

我是程序员小贱

3月日更

分享18个常用的ECMAScript 6代码片段

devpoint

reduce URL参数解析 Form表单数据解析

【LeetCode】逆波兰表达式求值Java题解

Albert

算法 LeetCode 28天写作 3月日更

蚂蚁二面:MQ消费端遇到瓶颈除了横向扩容外还有其他解决办法?

中间件兴趣圈

面试 RocketMQ 消息中间件

配置引起事故复盘

风翱

3月日更

Wireshark数据包分析学习笔记Day17

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

还有高仿项目吗

GitHub指北

TCP 三次握手与四次挥手

insight

TCP 3月日更

这份1307页Android面试全套真题解析,源码+原理+手写框架

欢喜学安卓

android 程序员 面试 移动开发

C++线程池ThreadPoolExecutor实现原理

Linux服务器开发

c++ 后端 线程池 Linux服务器开发 Linux后台开发

十步输出设计文档

鲁米

设计实践

苹果笔记本充不进电的解决方案

石云升

电脑故障 28天写作 3月日更

远程协助软件向日葵分析

lenka

3月日更

《码农歌》

臧萌

加班

花7.5亿都做不好的项目,被三位程序员爸爸重写并开源了_开源_Tina_InfoQ精选文章