1.3. 理解自由/开源软件及其在网络地图中的应用

“自由开放源码软件”(以下简称自由/开源软件)一词包括许多可以在技术界引发复杂甚至情绪化讨论的想法。要开始描述这个术语,重要的是要了解软件开发 比技术行业中的其他工艺更具有神秘感和艺术性 ,例如计算机芯片设计。除了软件在计算机上占用的兆字节数外,无法从物理角度查看,触摸,品尝或描述该软件。软件通常从白板上的想法开始,然后被程序员封装为无形的“类”和“对象”。然后将它们组装成可调用的具体任务集,并穿戴需要其他所有美学设计技能的按钮,菜单和图标的用户界面。

作为所有这些工作的结果,软件是一种使人能够实际使用计算机硬件的授权技术。事实上,专门的软件通常比它运行的物理机器要贵得多。软件是你进入打印,绘画,计算,存储数据的窗口,在我们的例子中,是制作地图的窗口。

考虑到软件的价值,商业企业在研究、开发和销售专有软件方面投资数百万并不奇怪。他们通过专利和版权法来保护它。他们混淆(扰乱)代码,使其更难复制或逆向工程。商业软件开发已经成为一个成功的企业,其产生的工具塑造了我们的工作和家庭环境。

与此同时,一些软件用户和开发人员主张,让软件源代码自由可见并能够在没有法律或技术限制的情况下进行修改或共享是有好处的。商业利益、技术利益和道德论据被用来支持“自由和开源软件”的概念

在学习自由/开源软件时可能会感到困惑,因为“free”这个词在英语中有多种含义。在自由和开放源码软件中描述F的一个常见比喻是“言论自由,而不是免费啤酒”。换言之,自由和开放源码软件是“自由”的,因为它是开放的,可以使用和修改的。(有时你可能会看到Free这个词/Libre 用来传达这个想法的开源软件(FLOSS)A whole range of license types 与自由/开源软件一起使用,自由/开源软件指定了软件修改和重用的条件,以及任何衍生产品所需的属性。

虽然不一定限制销售FOSS,但通常可以免费获得FOSS。我们将在本课程中使用的所有软件都可以直接从Internet上下载,并且不需要任何费用,尽管向您喜欢的项目捐赠几美元是投资其持续开发的好方法。

如果自由/开源软件通常是免费的,为什么它是一个如此成功的概念?人们如何通过编码来谋生呢?首先,必须提到的是,许多开发人员为自由/开源软件做出贡献,仅仅是为了个人享受,也为了将他们的技能捐赠给一个提供广泛社会效益的项目。他们喜欢在虚拟团队中工作,并面临着严格的软件开发挑战,而这些都是他们平常的“日常工作”所不能提供的。

不过,与此同时,许多人通过出售与自由和开放源码软件有关的服务和培训而过着慷慨的生活,其中一些努力可能会提高自由和开放源码软件功能的质量和数量。例如,假设你的公司投资了一个自由/开源软件包,它比你想要的任何东西都便宜30000美元;但是,它缺少对你的工作流程至关重要的“功能X”,而且你没有一个程序员可以实现功能X。因为软件的代码都是开放的,可以检查的,修改和扩展,您可以与摇滚明星程序员签约,以10000美元的价格为您实现功能X。如果特性X广泛适用于产品的优点,并且您和承包商都同意这个想法,那么特性X最终可能会被卷进核心源代码中,这样每个人都可以从中受益。

其他人可能不会经常为自由/开源软件项目做出贡献,但仍然可以通过销售自由/开源软件软件的支持服务来获利。当您购买专有软件时,通常会为您提供技术支持包的访问权限,以便在需要时与分析师通话和交谈。因为自由/开源软件不提供这些官方支持系统,所以进取心的人们已经介入以填补这一空白。请参阅 Linux Insider 中的本文,以获取有关自由/开源软件服务咨询的更多评论。

最后,一些新公司正在构建基于订阅的在线服务,这些服务是使用开放源代码构建块创建的,甚至可以在开放源代码许可证下发布。这些服务的订阅成本低于大多数组织在尝试构建自己的可比基础设施或质量控制程序时可能实现的成本。通过这些基于自由和开放源码软件的软件即服务(SaaS)产品,自由软件的价值传递给了许多买家。

尽管有许多自由和开放源码软件纯粹主义者,但使用自由和开放源码软件的决定并不一定会导致完全脱离专有软件。许多企业和政府使用所谓的“混合方法”,根据预算、员工技能和技术需求,将自由/开源软件和专有软件结合起来。

让我们考虑一下采用自由/开源软件给您的工作流程带来的一些好处、挑战和其他考虑因素。

1.3.1. 自由和开放源码软件的好处

当您开始努力学习使用自由/开源软件时,了解您可能看到的一些好处是有帮助的:

  • 低成本软件——自由/开源软件可以免费提供的原因在上面讨论过。即使你必须花费大量的培训、支持和咨询费用,这些费用也可能达不到你为一个专有软件包所花费的金额。

  • 更多的灵活性与软件-如果你承诺一个专有的软件供应商,你真的需要X或bug修复Y,你说服供应商添加这个功能的能力可能取决于合同的大小,有多少其他人想要的特点,以及下一个软件版本可用时(除非您是足够重要的客户,可以保证使用专门构建的修补程序或修补程序)。如果你是一个小客户,你想要的功能是模糊的(尽管对你来说任务很关键),那么你可能要等上几年,再也看不到它的添加。使用自由/开源软件,您可以随时添加功能或修复错误,您唯一的限制是可以找到的程序员技能。

  • 软件的互操作性——许多自由和开放源码软件产品试图遵守数据和web服务的开放规范,以便它们能够与其他产品无缝交互。在本课和本课程的后面部分,您将学习其中一些地理空间数据规范。

许多专有软件供应商确实支持读取开放规范,但他们通常会将数据写入专有数据格式,这些格式只能由供应商的软件处理。当开放的政府举措发挥作用时,这就成了一个问题,2013年3月,当Ohio Supreme Court ruled (*)Scioto县有理由要求公民支付2000美元的费用,以回应《公共记录法》对其地理信息系统数据的要求。收费原因:这些数据与专有的地理信息系统软件密不可分,需要额外的努力才能提取出来。

* 如果该链接对您不起作用,最有可能的原因是您位于美国以外的地方;只需在网上搜索该事件,您应该能够找到一些关于它的文章。

  • 安全性——军队、银行和其他政府机构都倾向于自由和开放源码软件,因为他们对自由和开放源码软件的网络安全机制有着全面的了解,并且可以根据自己的需求对其进行修补或修改。一些机构在通过严格的安全认证程序之前不会使用任何软件的新版本。自由/开源软件允许对在测试过程中暴露的问题做出更灵活的响应。

  • 道德–有些人将使用开源软件视为一个道德问题。对于许多开源倡导者来说,创建和使用属于知识共享的软件是一个强大的动力。自由/开源软件的开发和使用有助于集体人类知识的扩展。

1.3.2. 自由和开放源码软件的挑战

评估自由和开放源码软件系统的一个危险是允许潜在的令人兴奋的好处来掩盖自由和开放源码软件部署可能带来的真正挑战。下面的一些或所有挑战都可以减轻,但如果您能承担成本,专有软件可能会在这些领域提供更顺畅的道路。

  • 易用性——设计一个用户友好的软件产品需要的技能集与编写后端软件代码所需的技能集大不相同。当本课程的作者在一家专有软件供应商工作时,他被称为“产品工程师”,这些人是公司雇佣来与开发人员一起设计、测试和记录产品的人。他们没有编写源代码;他们只专注于制作一个可用的产品。

好的产品工程师是很难找到和雇用的,即使你是一家拥有诱人薪水的专有软件公司。当从事自由/开源软件项目后端逻辑的编码人员数量超过用户界面设计的工作量时,可用性就会受到影响。使这个问题更加复杂的是软件设计者和开发者之间需要频繁的迭代和清晰的交流。在一家专有软件公司的大厅里,这可能比在推动自由/开源软件的在线协作论坛中更容易发生。

一些从事自由/开源软件工作的人可能会对这一点进行激烈的辩论,因此,当你在本课程中与自由/开源软件一起工作时,请注意与专有软件相比,它的用户友好程度,并得出你自己的结论。

  • 文档的可用性–正如专有软件公司向设计师和测试工程师付费一样,他们也期望提供完整的文档产品。因此,他们雇用了可以编写软件手册,在线教程和其他培训的技术作家。有一个商业动机:如果您的产品没有得到很好的记录,它将在社区中获得负面声誉,人们将停止购买。

当软件免费交付时,您可以依靠项目贡献者的善意来提供任何类型的文档,其中许多文档可能是以wiki、教程和论坛帖子的形式生成的。对于那些习惯于使用专有软件的人来说,这可能是一种令人恼火的非结构化的方式,他们的文档应该“就在那里”在一个统一的、可搜索的帮助系统中。

一些自由和开放源码软件文档非常优秀,尊重贡献、校对和翻译这些文档的人是很重要的。但是,请注意,自由/开源软件通常是由非常聪明的人创建的,他们只需使用最简单的或零散的信息源就可以解决问题,而且他们可能希望您可以在使用他们的产品时以同样的水平玩。在私有软件和自由和开放源码软件中,当初始编码和测试完成,每个人都渴望将产品推出市场时,文档质量有时会被忽视或被赋予较低的优先级。

就像你在可用性方面所做的那样,注意文档质量,并在整个过程中做出自己的判断。你能在没有课程指导的情况下解决问题吗?它与您过去使用的专有软件帮助相比如何?

  • 支持可用性——如上所述,许多第三方承包商为自由/开源软件产品提供技术支持和咨询;但是,从专有软件供应商处购买支持的好处是,开发软件的人员通常可以由支持团队访问。因此,支持团队可以更深入地了解软件的意图、逻辑、设计和计划轨迹。他们还可以维护一个包含内部和外部记录的bug的大型数据库,这些bug可以帮助您快速找到解决方法。尽管自由和开放源码软件支持顾问可能会学到一些类似的东西,但支持经验并没有那么顺利地整合。

1.3.3. 争议点

在决定哪种类型的软件拥有优势时,自由/开源软件和专有软件的某些方面并不那么清楚。

  • 特性的广度——可以说自由/开源软件提供了一个更集中、更优先的特性列表,并且在特性的数量和深度方面可能无法与专有软件竞争(您将在本课程后面的Ramsey视频中看到这一点)。同时,FOS的灵活性允许通过插件和源代码的直接修改来添加无限特征,对于专有软件来说,不能总是说一些新特性的有限列表通过周期性更新被释放。这里需要注意的是,如果专有软件提供了良好的 API(换句话说,编程框架),第三方开发人员也可以将其扩展到有限的程度。

  • 质量和技术优势–与专有软件相比,自由/开源软件的“缺陷”可能取决于所讨论的产品、它们的成熟程度以及谁在开发它们。自由和开放源码软件的倡导者埃里克·雷蒙德(Eric Raymond)认为,“只要有足够的眼球,所有的bug都是浅薄的”,他认为自由和开放源码软件的任何重大问题都很难在广大的开发者群体中长期不被解决。不太清楚是谁修复了你碰到而其他人没有修复的模糊错误。如果你不能说服自由/开源软件社区的某个人修复它,你至少可以自己尝试或聘请顾问。

专有软件供应商显然具有修复漏洞的商业动机;但是,如果这样做的时间,精力和风险不能带来良好的投资回报,他们也有商业动机不修复某些难以理解的错误。如果您是小型土豆客户,并且在项目中遇到了难以理解的错误,那么最好开始寻找解决方法。

创新——在一家专有软件公司,如果大量的研发资金可以投资于面对面合作的全职员工,那么创新是否更容易发生?在这样一个环境中,所有的代码都可以供任何人阅读和实验,创新是否兴旺发达?答案的一部分可能取决于与前瞻性愿景相比,这家专有软件公司在“被动”基础上运营的程度。这还取决于公司的目标是否鼓励某些类型的发展而牺牲了其他类型的发展。

  • 创新很少出现在真空中。有人会说,当知识共享空间中有更多可以利用的元素时,创新就会更自由地发生。

1.3.4. 广泛使用自由/开源软件的例子

自由/开源软件的开发支持系统架构的所有层次。你以前可能听说过(或使用过)这种软件。例如,术语“LAMP堆栈”是指正在运行的系统:

  • Linux操作系统

  • Apache web服务器

  • MySQL(或MariaDB)关系数据库

  • PHP应用程序脚本语言

这种缩写词的其他变体也存在。例如,PostgreSQL是另一个开源关系数据库,由于PostGIS扩展的流行,它通常与GIS一起使用。这将导致LAPP堆栈而不是LAMP堆栈。

其他通用的自由/开源软件包括LibreOffice套件(类似于Microsoft Office)、Mozilla Firefox web浏览器、Thunderbird电子邮件客户端、Python脚本语言等。

1.3.5. 自由/开源软件在政府中的使用

一些政府已经开始授权或鼓励在政府办公室和项目中使用自由/开源软件。这在拉丁美洲和欧洲尤其受欢迎one of the more recent government decrees occurring in the United Kingdom 。通常,自由/开源软件首先在服务器和后端基础设施上实现,然后在稍后阶段推出到桌面工作站。

这些有利于自由和开放源码软件的政策产生的原因各不相同。显然,软件许可证的节省和FOS提供的灵活的安全模型是可取的,但有时也有政治动机拒绝专有软件公司及其原籍国(特别是在美国被视为帝国主义者的地方)。如果你对这个题目有兴趣,我建议你多读一些Aaron Shaw's study of the FOSS movement in the Brazilian government 与左派政治的联系 [here is an alternative link to the paper in case the other link isn't working] .

1.3.6. 自由/开源软件与 Web 制图

自由和开放源码软件在地理信息系统行业有着强大和不断增长的影响力。处理地理空间数据的一些工具和实用程序已经存在了几十年。例如GRASS GIS 由美国陆军工程兵团开发的,最近才30岁。看看那时候的样子,看看这个old GRASS promotional video 除了威廉·沙特纳,没有其他人在叙述。我仍然在入门课程中使用这个视频来教授地理信息系统的好处和地理信息系统的主要组件。

在本课程中,我们将使用一些桌面工作站地理信息系统工具来预览和操作我们的数据集,然后再将它们放到网上。例如,在本课程的后面,您将安装并探索QGIS (以前称为Quantum地理信息系统)是最受欢迎和用户友好的自由/开源软件地理信息系统程序之一。

还有各种自由和开放源码软件选项,可以在您自己的办公网络或整个互联网上公开您的地理信息系统数据。其中包括Map Server , QGIS Server ,和GeoServer ,后者将在本课程中学习。这些软件产品将您的GIS数据集作为web服务提供,这些服务以多种格式提供。它们包括一个Web服务器,或者被设计成与现有的Web服务器集成,这样您的Web服务就可以到达您自己的办公室或网络之外的计算机。

自由/开源软件还可以用来生成一组瓦片图像或矢量数据,这些数据可以用作网络地图中的图层。在本课程中,您将学习如何使用TileMill ,它在自由/开源软件地图创建库周围放置了一个用户友好的界面,称为Mapnik

桌面和服务器地理信息系统的基础是包含地理信息系统数据的数据库。如果您需要比shapefile文件夹稍微复杂一点的内容,或者希望使用空间数据库类型,那么您可以使用FOSS GIS数据库。其中包括PostGIS (它是PostgreSQL关系数据库的扩展)和SpatiaLite (使用SQLite数据库)。对于较小的数据集,一个更便宜的选择是使用独立的GeoJSON、KML、GeoRSS文件或其他基于文本的数据格式。

若要将所有地图图层拉到一起并在网页上显示它们,将使用编程框架或API。一些最成熟的Web 制图api是OpenLayersLeaflet ,您将在本课程后面的JavaScript编程语言中使用它。其他流行的FOSS Web 制图api包括ModestMaps , D3 ,和Polymaps