共同的起源:Mapbox GL Native 和 Mapbox GL JS
- Mapbox 的开创性工作: Mapbox 公司是矢量切片地图渲染技术的先驱和主要推动者。他们开发了两个核心的开源库:
- Mapbox GL Native: 用 C++ 编写的跨平台原生地图渲染库(用于 iOS, Android, macOS, Qt 等)。
- Mapbox GL JS: 基于 WebGL 的 JavaScript 库,用于在 Web 浏览器中渲染交互式矢量地图。
- 技术核心: 这两个库共享相同的底层 Mapbox GL 渲染引擎(用 C++ 编写,通过 Emscripten 编译成 WebAssembly/JavaScript 供 GL JS 使用)。它们实现了:
- 基于矢量切片(Vector Tiles)的高效数据传输。
- 使用 GLSL 着色器进行 GPU 加速的复杂样式渲染。
- 流畅的平移、缩放、旋转(3D 地形和建筑)。
- 动态样式(运行时修改地图样式)。
- 高度灵活和可定制的地图体验。
分水岭:Mapbox 的许可证变更 (2020 年 12 月)
- 背景: Mapbox GL JS 和 Mapbox GL Native 最初都是在非常自由的 BSD-3-Clause 许可证下开源的。这允许任何人几乎无限制地免费使用、修改和分发代码,包括用于商业闭源项目。
- 变更: 2020 年 12 月,Mapbox 宣布将 Mapbox GL JS 和 Mapbox GL Native 的开源许可证从 BSD-3-Clause 更改为 Mapbox 专有的共享源代码许可证。这个新许可证的核心限制是:
- 禁止 SaaS 服务: 不允许其他公司使用这些库的核心代码来构建和提供商业性的、基于地图的 Web 服务或 SDK 即服务(SaaS)。这直接针对云服务提供商和大型商业用户。
- “竞争性产品”限制: 条款模糊地禁止用于构建与 Mapbox 核心产品(主要是其地图服务)直接竞争的产品。
- 动机: Mapbox 声称这是为了保护其投资和可持续性,防止大型云服务商(如 AWS, Google Cloud)免费利用其开源成果构建直接竞争的托管地图服务,从而蚕食 Mapbox 的核心付费业务。
MapLibre GL 的诞生:社区分叉 (2021 年)
- 社区的反弹: 许可证变更在开源社区(包括开发者、贡献者和依赖这些库的公司)中引起了巨大争议和担忧。许多人认为新许可证:
- 违背了开源精神(尤其是“自由”中的“自由使用于任何目的”的自由)。
- 引入了模糊的“竞争性”条款,增加了法律风险和不确定性。
- 限制了创新和构建基于地图的 SaaS 的可能性。
- 分叉行动: 为了维护一个真正自由、开放、不受商业使用限制的版本,来自多家公司(包括 Uber, Microsoft, AWS, Meta 等)和个人开发者的社区成员迅速采取行动。
- MapLibre 的成立:
- 他们创建了 MapLibre 组织。
- 在 Mapbox 的最后一个 BSD 许可版本(GL JS v1.13.0, GL Native v5.x)基础上进行了分叉 (Fork)。
- 将分叉后的项目命名为:
- MapLibre GL JS (取代 Mapbox GL JS)
- MapLibre Native (取代 Mapbox GL Native,后来发展出 MapLibre GL Native for iOS/Android/macOS 等)
- 核心行动: 最关键的一步是将项目的许可证重新改回为宽松的 BSD-2-Clause 许可证(或兼容的 MIT 许可证),移除了 Mapbox 专有许可证的所有商业使用限制。
MapLibre GL 与 MapBox GL 的关系现状
- 直接分叉: MapLibre GL JS 和 MapLibre Native 是直接从 Mapbox GL JS (v1.13.0) 和 Mapbox GL Native (v5.x) 的 BSD 许可版本分叉出来的。这意味着它们的初始代码库是高度兼容甚至相同的。
- 独立的演进路径:
- MapLibre: 在分叉后,MapLibre 社区独立发展项目。
- 目标: 专注于维护一个完全自由开源(FOSS)、由社区驱动的现代地图渲染库。核心原则是开放治理和宽松许可证。
- 发展: 社区积极修复 Bug,添加新功能(如改进的标签渲染、新数据源支持、更多样式规范实现),优化性能,并努力保持不同平台(JS, Native)之间 API 和功能的尽可能一致。它不包含 Mapbox 专有服务或数据。
- 治理: 项目在 Linux Foundation 下托管,确保中立性和开放的治理模式。
- Mapbox: 继续开发其专有许可证下的 Mapbox GL JS (v2.x+) 和 Mapbox Maps SDKs for Native (v10.x+)。
- 目标: 专注于其商业产品和服务的整合与增强,推动其付费平台(地图服务、导航、搜索等)的竞争力。新版本包含了许多闭源或依赖 Mapbox 服务的特性和优化。
- 发展: 添加了大量新功能(如 Globe View、3D 地形优化、更复杂的样式效果),但很多高级特性深度绑定 Mapbox 服务,或者其底层实现细节在专有许可证下不再完全开放。开源部分更多是“共享源代码”而非传统意义上的“开源”。
- 技术兼容性 (关键点):
- API 兼容性: MapLibre GL JS 努力保持与 Mapbox GL JS v1.x 的 API 高度兼容。对于大多数使用 Mapbox GL JS v1.x 的项目,迁移到 MapLibre GL JS 通常只需更换库的引用(如 JavaScript 导入/SDK 依赖),有时需要少量调整。MapLibre Native 也尽量兼容旧 Mapbox Native SDKs 的 API。
- 样式规范兼容性: MapLibre 项目继续支持和扩展 Mapbox Style Specification。使用 Mapbox Studio 设计的样式(只要不使用 Mapbox 专有数据源或特性)通常可以在 MapLibre 中渲染。MapLibre 也在向规范中添加自己的扩展。
- 数据源兼容性: 两者都支持标准的矢量切片源(如 MVT)和栅格切片源。MapLibre 不依赖 Mapbox 特定的服务端点。
- 生态分离:
- MapLibre 生态: 围绕 MapLibre 发展起了独立的插件、工具、文档和社区支持(论坛、Slack)。它鼓励使用任何兼容的瓦片服务(如自己搭建的、开源的 OpenMapTiles、或第三方商业服务如 Maptiler、Stadia Maps 等,只要它们不依赖 Mapbox 专有后端)。
- Mapbox 生态: 深度集成 Mapbox 自家的服务(地图瓦片、方向、搜索、地理编码、实时交通等)。其高级特性和优化往往需要后端 Mapbox 服务的配合。
如何选择?
- 选择 MapLibre GL 如果:
- 你需要一个真正自由开源的解决方案,避免许可证风险(尤其是 SaaS 或可能被视为竞争的应用)。
- 你的项目不依赖 Mapbox 的专有服务(地图瓦片、搜索、导航等),或者你愿意/能够使用替代服务(自托管、OpenStreetMap 相关服务、其他商业供应商如 Maptiler, Stadia Maps)。
- 你正在使用或希望兼容 Mapbox GL JS v1.x / Native v5.x 的 API。
- 你重视社区驱动和开放的治理模式。
- 预算有限,希望零成本使用核心渲染引擎。
- 选择 Mapbox GL (v2+/v10+) 如果:
- 你深度依赖 Mapbox 的核心服务(地图瓦片、导航、搜索、地理编码、实时交通等)并且愿意付费。
- 你需要 Mapbox SDKs 提供的最新、最前沿且深度集成其服务的高级特性(如 Globe View、高度优化的 3D 地形、特定风格效果),并且这些特性无法通过 MapLibre 或替代服务满足。
- 你的应用场景明确不受其专有许可证的限制(例如,非 SaaS 的内部应用、非竞争性产品)。
- 你需要 Mapbox 提供的官方企业级支持和 SLA。
写在最后
MapLibre GL 是 Mapbox GL 开源遗产的直接继承者和守护者。正是MapLibre 的出现,再次为地图渲染领域提供了至关重要的、不受商业限制的优秀开源产品。
更多MapLibre使用问题,欢迎留言或联系我们。转载须注明出处。