From 273e5611b91bbff2c4b62ead0cef48eecf236a23 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Thu, 10 Sep 2026 01:00:38 +0800 Subject: Add journal on GCJ-02 and software freedom --- .../2026/09/gcj-02-and-software-freedom/index.md | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 content/journal/2026/09/gcj-02-and-software-freedom/index.md (limited to 'content/journal/2026/09/gcj-02-and-software-freedom') diff --git a/content/journal/2026/09/gcj-02-and-software-freedom/index.md b/content/journal/2026/09/gcj-02-and-software-freedom/index.md new file mode 100644 index 0000000..8099e10 --- /dev/null +++ b/content/journal/2026/09/gcj-02-and-software-freedom/index.md @@ -0,0 +1,54 @@ +--- +title: "坐标、秘密计算与软件自由:从 GCJ-02 谈起" +slug: "gcj-02-and-software-freedom" +lang: zh-Hans +created: 2026-09-09 +updated: 2026-09-09 +license: CC-BY-SA-4.0 +--- + +全球卫星导航和地理信息系统广泛使用 **WGS-84(World Geodetic System 1984)**。在二维地理坐标中,一个位置可以写成 + +$$P_{\mathrm{WGS}}=(\lambda,\varphi),$$ + +其中 $\lambda$ 为经度,$\varphi$ 为纬度。GPS、全球 GIS 数据以及大量跨国地理信息系统都可以用这样的坐标描述同一个地理位置。中国正式使用的国家大地坐标基准是 CGCS2000;日常互联网地图中经常引起数百米偏移问题的 **GCJ-02** 属于另一层空间位置安全处理。中国现行强制性国家标准 GB 20263-2006《导航电子地图安全处理技术基本要求》规定了导航电子地图的安全处理要求,目前仍处于现行状态。([全国标准信息公共服务平台](https://std.samr.gov.cn/gb/search/gbDetailedCNF?id=71F772D76AF6D3A7E05397BE0A0AB82A "国家标准 - 全国标准信息公共服务平台")) + +从数学上,可以把 GCJ-02 抽象地表示为一个坐标变换 $T$: + +$$T:(\lambda,\varphi)\longmapsto (\lambda',\varphi').$$ + +于是 + +$$P_{\mathrm{GCJ}}=T(P_{\mathrm{WGS}})$$ + +并可以进一步写成 + +$$\lambda'=\lambda+\Delta\lambda(\lambda,\varphi),$$$$\varphi'=\varphi+\Delta\varphi(\lambda,\varphi).$$ + +这里的 $\Delta\lambda$ 与 $\Delta\varphi$ 都随地理位置变化,因此这种处理产生的是空间变化的偏移场。若把经纬度差换算成地面距离,在局部范围内可以近似写为 + +$$d\approx R \sqrt{ (\Delta\varphi)^2+ \left(\cos\varphi\,\Delta\lambda\right)^2 },$$ + +其中各角度使用弧度,$R$ 可以近似取地球半径 $6.37×1066.37\times10^6$ 米。GCJ-02 与 WGS-84 之间常见的数百米差异由这种额外的位置处理产生。公开互联网上存在许多能够近似实现 WGS-84 与 GCJ-02 转换的程序,但国家正式认可的地理信息保密处理算法及参数没有作为公开技术规范发布。2020 年《测绘地理信息管理工作国家秘密目录》明确把“国家认定的地理信息保密处理技术算法及参数”列为机密,保密期限为长期。([外交部](https://www.mfa.gov.cn/wjb_673085/zzjg_673183/bjhysws_674671/bhflfg/ldbjchxgfl/202303/P020230313534680395614.pdf?utm_source=chatgpt.com "自然资源部、国家保密局关于印发《测绘地理信息管")) + +这种制度会给计算机用户带来一个非常具体的问题, **同一个地点不能天然地在不同地图系统之间用同一组数字表示。** 用户从 GPS、照片 EXIF、国际地图、科研数据库或者自由 GIS 软件获得 WGS-84 坐标,再将其放入采用 GCJ-02 数据的系统时,位置可能出现数百米偏移。开发者于是必须追踪每一份地理数据的来源、参考框架和转换历史。跨越中国大陆地图服务边界时,软件还需要保证转换次数和转换方向完全正确。一次遗漏可能造成偏移,一次重复转换同样可能制造新的错误。 + +这种复杂性具有累积效应。一张照片的位置、一条自行车轨迹、一份野外调查记录、一个灾害救援地点或者一个用户自己建立的地理数据库,都可能需要附加“这究竟是什么坐标”的元数据。不同程序之间交换数据时,还必须确保双方对坐标语义作出相同理解。一个原本可以直接复制、保存和计算的位置,由此获得了额外的、具有地域依赖性的转换状态。对于自由软件开发者来说,还存在进一步的问题:公开实现只能根据可观察结果建立近似转换,无法根据公开的正式算法规范独立验证自己是否准确重现国家规定的处理过程。 + +这个问题也触及了**软件自由**。按照 GNU 工程和自由软件基金会的定义,一个程序尊重用户的软件自由,需要给予用户四项基本自由:按照自己的意愿为任何目的运行程序的自由;研究程序如何工作并修改程序,使它按照自己的意愿完成计算的自由;分发程序副本的自由;以及分发自己修改版本的自由。研究和修改程序要求用户能够获得相应的源代码。([GNU](https://www.gnu.org/philosophy/free-sw.en.html?utm_source=chatgpt.com "What is Free Software? - GNU Project - Free Software Foundation")) + +这里有一个重要的原则。**软件自由并不取决于用户本人是否会编程。** 一个不会阅读 C、Rust 或汇编语言的人仍然拥有研究和修改软件的自由。他可以请朋友修改,可以雇佣程序员修改,可以依赖一个自由软件社区维护修改版本,也可以完全不行使这些自由。自由本身保留了个人控制和集体控制软件的可能性。Stallman 对此作出了很明确的区分, 自由之零和自由之一允许用户对程序实施个人控制,自由之二和自由之三又使用户群体能够共同控制程序;四项自由共同构成用户对程序的控制。([GNU](https://www.gnu.org/philosophy/free-software-even-more-important.html?utm_source=chatgpt.com "Free Software Is Even More Important Now - GNU Project - Free Software Foundation")) + +因此,自由软件理念关注的范围比“算法是否公开”更广。某家公司完全可以公开一篇论文,详细描述某个坐标变换公式,同时仍然向用户提供一个禁止研究、修改和重新分发的专有程序。算法知识本身无法赋予用户完整的软件自由。反过来,如果一个自由程序实现某种坐标转换,用户能够查看源代码、删除这段转换、修改它、换成自己的实现并分发修改版本,那么程序层面的四项自由仍然存在。评价一项计算是否自由,需要考察**谁最终控制执行这项计算的程序**。 + +这一点正是 FSF 和 RMS 对专有软件提出伦理批评的基础。在这一思想体系中,当用户拥有四项自由时,用户能够个人地和集体地控制程序;当这些自由被剥夺时,程序的开发者或者其他控制者取得了支配用户计算的权力。GNU 工程因此把专有软件视为一种不公正的权力关系,并主张用户拒绝在自己拥有或经常使用的计算机上运行非自由软件。([GNU](https://www.gnu.org/philosophy/free-software-even-more-important.html?utm_source=chatgpt.com "Free Software Is Even More Important Now - GNU Project - Free Software Foundation")) + +GCJ-02 问题应当按照这个原则精确判断。如果某个地图程序在用户的计算机上执行坐标安全处理,同时用户没有研究、修改、删除或者替换这段程序的自由,那么这属于非自由软件所进行的计算。算法因法律规定而保持秘密,会进一步阻止用户理解和独立实现这项处理。当计算发生在远程服务器上,问题还涉及用户对远程计算的控制。RMS 将一种特定情形称为 **SaaSS(Service as a Software Substitute,软件替代服务)**:用户把本来属于自己的计算任务交给他人的服务器执行,服务器上的程序受服务提供者控制,用户无法研究和修改执行自己计算的程序。单纯提供已经发布的数据与替用户执行计算属于不同技术情形,因此具体地图服务需要根据数据流逐项判断。([GNU](https://www.gnu.org/philosophy/free-software-even-more-important?utm_source=chatgpt.com "Free Software Is Even More Important Now - GNU Project - Free Software Foundation")) + +自由软件运动由此提出了一条比“提高透明度”更严格的要求:**用户应当控制自己的计算。** 仅仅告诉用户“系统进行了安全处理”无法给予自由之一;仅仅公布处理公式也无法给予自由之二和自由之三;允许查看代码却禁止修改,同样缺少基本的软件自由。源代码可得、运行权、修改权和分享权共同决定程序是否尊重用户。 + +国家当然可能拥有需要保护的军事和地理信息。信息发布者可以决定哪些秘密材料能够公开,社会也可以围绕国家秘密的范围建立法律制度。然而,当一项制度进一步规定普通人的计算机必须如何处理用户自己的数据,并使用户无法完全研究和控制执行这一任务的软件时,就会产生一个独立的软件自由问题。国家安全的理由不会自动消除个人对自己计算的自由要求。对于任何这样的限制,社会都有理由追问其必要性、有效性、范围和持续时间;对于已经可以通过公开数据和公开程序高度近似恢复的坐标变换,这种追问尤其具有现实意义。 + +自由软件运动最终要求我们重新考虑计算机中的权力关系。我们每天使用计算机处理自己的文字、位置、通信、照片和生活记录。能够亲自理解程序的人只是用户中的一部分,四项软件自由使所有用户都可以通过个人选择和社会合作获得对程序的控制。我们可以使用别人编写的软件,也可以请别人研究它;可以保留原来的程序,也可以修改或者替换它;可以独立行动,也可以与整个社区分享改进。 + +因此,我们应当拒绝要求用户放弃四项基本软件自由的计算制度,并推动自由软件取代专有软件。对于地图和坐标处理,这意味着支持能够自由运行、研究、修改和分享的程序,支持公开且可互操作的数据格式,并要求用户能够控制发生在自己计算机上的坐标处理。自由软件所维护的目标十分明确:**程序应当由它的用户共同控制,用户的计算应当属于用户自己。** ([GNU](https://www.gnu.org/philosophy/free-sw.en.html?utm_source=chatgpt.com "What is Free Software? - GNU Project - Free Software Foundation")) -- cgit v1.2.3