为什么“图书角”无法将贡献同步回 OpenStreetMap
Why Book Corners won't sync contributions back to OpenStreetMap

原始链接: https://www.andreagrandi.it/posts/why-book-corners-wont-sync-contributions-back-to-openstreetmap/

“Book Corners”是一个旨在绘制公共书架地图的项目。该项目的开发者最初计划允许用户将新的书架位置上传并贡献给 OpenStreetMap (OSM)。虽然从技术实现上看这似乎很简单,但开发者发现,向 OSM 贡献数据涉及许多非技术层面的障碍。 OSM 为数据导入和自动编辑制定了严格的准则,以防止地图数据损坏并确保数据质量。要达到这些标准,需要创建专门的导入账户、发布正式文档、处理复杂的许可问题,并进行广泛的社区磋商。这不仅是一次性的工作,更是一项长期的运营责任。 最终,开发者认为,对于一个小规模项目而言,沉重的维护负担和长期的投入并不划算。将精力投入到这一集成功能中,会分散对改善核心用户体验(如无障碍功能和发现工具)的注意力。因此,开发者决定无限期搁置 OSM 回写功能,并强调“有时候,最好的功能就是没有功能”。虽然数据贡献非常有价值,但该项目目前缺乏足够的资源,无法满足负责任地进行集成所需的社会和组织契约。

“Book Corners”的作者解释了为何其公共书架定位项目不与 OpenStreetMap (OSM) 同步贡献数据。尽管他们欣赏 OSM,但他们认为该项目对于批量或自动数据导入的门槛(如强制性的社区沟通、严格的质量控制和持续的维护)要求过高,对于一个小型志愿者项目而言,资源成本难以负担。 Hacker News 社区围绕此事的讨论凸显了两种主要观点: * **OSM 的僵化:** 支持 OSM 严格流程的人士认为,这些准则是防止垃圾信息、维护高数据完整性以及确保该项目作为可靠的“唯一事实来源”的必要保障。他们坚信“没有数据好过错误数据”,并建议小型项目应将 OSM 视为底图层,而非随意填入未经核实的众包信息的场所。 * **参与门槛:** 批评者认为,这些要求对小型开发者来说负担过重,可能导致 OSM 数据过时或缺失。关于如何更好地整合,建议包括:利用 OSM 的“Notes”API 传递信号、允许用户通过应用直接向 OSM 提交信息,或是采用“数据信号”模型,即由 OSM 接收贡献后再由社区进行验证。
相关文章

原文

A feature that sounded obviously good

When I introduced Book Corners, I explained that much of its initial data came from OpenStreetMap. OSM gave the project a useful starting point, with thousands of public bookcases already mapped around the world.

Book Corners also accepts new libraries directly from its users. People can submit a location and a photo, and the contribution becomes public after moderation. It seemed only fair that, when one of those submissions was missing from OSM, Book Corners should be able to contribute it back.

The idea was not to create an uncontrolled background synchronisation process. The workflow I had in mind was deliberately cautious:

  • The person submitting the library would explicitly allow the contribution.
  • An administrator would review the library first.
  • Book Corners would search OSM for possible duplicates.
  • The administrator would preview the exact data being sent.
  • Nothing would be written until the administrator confirmed it.

From a software-development perspective, this looked like a manageable integration: add consent, track contribution state, build a preview, authenticate with OSM, and create the new feature through its API.

The code was not the difficult part.

Contributing data is not just an API call

Once I started researching the implementation properly, I discovered that writing to the API was only a small part of the work.

Because the information would come from the Book Corners database, OSM could consider it an external-data import. Because software would prepare and submit the changes, it could also fall under the rules for script-assisted or automated edits, even though an administrator would review each individual library.

Following the conservative interpretation of the OSM Import Guidelines and the Automated Edits code of conduct would require more than a dedicated account and an OAuth token.

Before the first production contribution, I would need to:

  • Create and maintain a dedicated OSM import account.
  • Publish a detailed import plan on the OSM Wiki.
  • Document the data source, licensing, field mapping, duplicate detection, software, quality checks, changeset policy, and rollback procedure.
  • Open a proposal on the OSM Community Forum.
  • Contact the relevant local communities affected by the contributions.
  • Wait through the review period and resolve any concerns.
  • Keep permanent links between the import account, plan, discussions, and changesets.
  • Maintain a contact and opt-out route for future questions or complaints.

There are also important licensing questions. A user’s permission to send a library to OSM is not automatically the same as having a sufficiently clear right to release that factual information under terms compatible with OSM. The user-facing explanation and consent would need to cover that distinction, including confirming that the information was not copied from an incompatible source.

These requirements are not a one-time form to complete and forget. They create an ongoing responsibility around the account, the documented process, community feedback, failures, and potential reversions.

I understand why these rules exist

OpenStreetMap is a shared global database. A bad import can create thousands of duplicates, overwrite better local knowledge, or introduce errors that are difficult to remove once other people have edited the same objects.

From that perspective, requiring documentation, licensing clarity, duplicate handling, accountable operators, and community discussion is reasonable. The OSM community has to protect the quality of the map, and good intentions do not guarantee good data.

Book Corners itself benefited from that data quality. It would be hypocritical to expect OSM to accept changes from an external service without safeguards.

At the same time, the process has a real cost. It asks a small project to become not only an API client, but also the operator of a documented import programme. That may be appropriate for organisations importing large datasets, but it is a considerable commitment for a low-volume feature whose only purpose was to contribute a few carefully reviewed public bookcases back to the commons.

The operational work outweighs the value

Book Corners has a simple purpose: help people discover little free libraries and share new ones with others.

Operating an OSM contribution pipeline is not central to that purpose. It would add credentials, production safeguards, audit and reconciliation code, community processes, licensing work, and a long-term support obligation. Every part is individually defensible, but together they make this a much larger feature than I initially intended.

There is also an opportunity cost. Time spent operating this integration is time not spent improving library discovery, moderation, photos, accessibility, translations, or the mobile experience. Those improvements directly help Book Corners users and are much easier for a small project to sustain.

I started from the feeling that contributing back was simply the nice and fair thing to do. After investigating it, I no longer think goodwill alone is enough reason to accept an open-ended operational responsibility.

The decision

I have decided to suspend the OSM write-back implementation indefinitely.

Book Corners will continue to acknowledge OpenStreetMap as the source of records imported from it, and OSM-imported libraries will never be submitted back as if they were new. But libraries contributed directly to Book Corners will remain in Book Corners; the service will not automatically or manually create matching OSM objects.

Nothing currently writes from Book Corners to production OSM, so suspending the work does not require disabling or migrating an existing integration.

I may reconsider the decision if a genuinely lightweight workflow becomes available, or if the scale and value of Book Corners contributions eventually justify the process. Another possibility would be a user-driven workflow that opens a proposed feature in an existing OSM editor, although that would still need to be discussed with the community rather than treated as a way around the rules.

For now, the responsible choice is not to build and operate a feature I am not confident I can support properly.

Sometimes the right feature is no feature

It is easy to think of implementation decisions as purely technical: can the API do it, can the application authenticate, and can the code avoid duplicates?

This experience was a reminder that external integrations also come with organisational and social contracts. Sometimes those contracts are more expensive than the code. Discovering that before deployment is useful, even when the result is disappointing.

I still believe contributing data back to shared open projects is valuable. I also understand why OSM protects its database so carefully. But for Book Corners, at its current scale, the balance between benefit and responsibility does not work.

So this is one feature I am choosing not to ship.

联系我们 contact @ memedata.com