研究论文中提到的软件源代码未发布是有原因的吗?我了解研究论文更多地是关于完成某件事的一般想法,而不是实现细节,但是我不明白为什么他们不发布代码。
例如,本文结尾为:
结果
人画线系统是使用OpenGL通过C ++中的Qt框架实现的,并且可以在2.00 GHz英特尔双核处理器工作站上运行,而无需任何其他硬件帮助。当系统合成新的路径和纹理时,我们可以交互地绘制线条。
他们是由于打算通过货币化还是出于版权而故意关闭源代码?
研究论文中提到的软件源代码未发布是有原因的吗?我了解研究论文更多地是关于完成某件事的一般想法,而不是实现细节,但是我不明白为什么他们不发布代码。
例如,本文结尾为:
结果
人画线系统是使用OpenGL通过C ++中的Qt框架实现的,并且可以在2.00 GHz英特尔双核处理器工作站上运行,而无需任何其他硬件帮助。当系统合成新的路径和纹理时,我们可以交互地绘制线条。
他们是由于打算通过货币化还是出于版权而故意关闭源代码?
Answers:
我想到了几个原因。
阅读Randall LeVeque关于“不共享代码的十大原因(以及为什么仍然应该如此)”的演示文稿http://faculty.washington.edu/rjl/talks/LeVeque_CSE2011.pdf
他有说服力地争辩说代码类似于数学中的证明,并邀请我们考虑一个世界,在该世界中,证明太长,太丑陋,或者在极端情况下不起作用或可能值得证明不被公开钱,否则有人可能会偷走...
基本上,如果您从事科学工作,则应该发布代码。否则,您在进行炼金术,就我而言,您可以飞回黑暗时代并死于瘟疫。
通常,用于产生论文结果的程序只是工具,只有结果很重要。因此,它们不会放在介绍上下文,方法,结果以及关于它们的讨论的论文上。
但是结果必须是可重现的。然后,当论文所基于的数据源公开可用时,通常也需要将其转换为结果的程序。如果它们不会引起任何专利/版权问题,则通常将它们放置在Web上的“某处”。或者,至少,如果您要求作者,则必须将程序发送给您。
它不是封闭源。该软件根本没有发布。
简短答案:
不发布软件有多种原因,但是以闭源方式发布软件并不常见。
长答案:
封闭源代码表示已发布软件,而源代码尚未发布。但是常见的情况是软件和源代码都尚未发布。
根据我的经验(我从事大气科学工作),如果您与他们联系,并询问是否可以获取他们的软件(当然包括源代码)来进行研究,那么作者将感到非常高兴。如果我要根据他们的项目撰写论文,他们至少会被引用(很好!),但可能会从中获得合著论文(当然,因为他们没有记录他们的软件,以便他人无需他们的帮助即可使用它)。相对便宜的合著者论文,所以更好。
真正的问题是:
他们为什么不发布软件?
有几个原因:
该列表可以做得更长一些。在Acadeemia.SE,这应该是一个单独的问题,而不是此处。
(请注意,在我们小组中,我们确实发布了我们的软件-根据GPL许可)
这听起来可能很愤世嫉俗,但是根据我的经验,研究论文的撰写并非易于理解或易于复制。取而代之的是,在研究界中,拥有听起来听起来很科学的文章更为重要。因此,大多数作者将其代码转换为数学公式,并试图证明其算法在数学上是正确的。通常,此类文章的页面数是有限的,因此没有足够的空间来发布代码。但是,当然,这不会限制任何作者使用URL链接到完整的代码...
可以假设,如果代码未发布,那么作者要么想刻板化他们的发现,要么(我个人认为是更常见的情况)他们担心人们会看到他们的研究并不像他们声称的那样出色。通常,结果仅适用于极少数情况。
另外,我已经看到,从一个简单的程序/算法中可以得到几篇研究论文。如果要发布代码,则将很难就该主题撰写任何其他论文。因此,为了将其随时间推移以小片段的形式发布,会保留一些知识。
请始终记住,在大学中,重要的不是结果或研究的适用性,而是您发表论文的数量。这是可悲的,但却是事实。
除了要货币化之外,我看不出将源代码排除在研究论文之外的充分理由。有一个很小的动议,提议提供源代码作为发布以某种方式,形状或形式依赖软件的任何研究的规则。您可以阅读更多有关《科学代码宣言》的内容。
上面的答案缺少在计算机图形学(作者提到的论文发表的地区)中经常出现的一些实际原因。CS中各个字段之间的代码发布差异很大-例如,在机器学习中,通常会发布代码。在人机交互中,几乎从未发布过代码。
我已经在计算机图形学中发布了很多代码,虽然我确实认为作者应该发布他们的代码,但是有很多简单的,非阴谋论的原因却没有。例如
1)大多数计算机图形学研究项目都涉及多个研究人员之间的合作,这些研究人员通常在不同的机构,每个研究人员都提供一些难题(即算法,库等)。要发布工作代码,所有研究人员都必须同意。这很少是简单的讨论,通常更容易避免该问题。
2)通常,一张纸的代码嵌入在实验室内部正在开发的更大的代码库中。该代码库将包含其他未发布的作品。为单个项目分离代码是一项繁重的工作,通常不会给那些必须从事这项工作的人员带来直接好处(请参见下面的激励)。
3)大学通常对代码具有知识产权。因此,有必要联系“创新办公室”,这将使您的生活变得无穷无尽,希望您在开源之前记录“发明”,以便他们可以申请专利,等等。在某些情况下,大学甚至可以拒绝发布源的许可(这在不同的机构之间有所不同,并且由于(1)而非常复杂)
4)许多计算机图形学研究是由公司进行的。在那种情况下,作者也不拥有该代码,并且必须获得律师的许可才能发布该代码。律师几乎没有动机说是。
5)没有动力发布代码。大多数计算机图形学研究代码从未被其他人使用。即使是这样,对于通用代码,您通常也只会得到一个确认(就您的CV而言毫无价值)。如果幸运的话,您会被引用。如果您发布了代码,招聘委员会和Grant机构通常一点也不在乎。因此,为发布代码准备代码所花费的时间被浪费在本来可以浪费在另一篇论文上的时间。(有人积极地尝试在计算机图形学中更改此设置)。
6)有不公开代码的动机。代码有时可以变成新兴公司,被授权给现有公司等。这为将来的研究提供了资金。我们都要吃。
通常是页面限制的问题。如果该算法非常短,则通常在论文中至少将其表示为伪代码。另一方面,如果基础代码的印刷版本甚至只有几页长,则打印代码将不会留有文章的空间。十页长的期刊文章是一篇长文章。
不提供源可能会导致欺诈。由于这种潜力,现在许多期刊都要求作者提交其源代码作为补充信息(如果您可以访问,则可以从期刊中获得;可能会收取高额的订阅费)。其他一些期刊则要求作者将源代码发布给任何要求它的人。然而,其他期刊仍处于黑暗时代。不需要源代码即可提交,也不需要作者发布它。
最简单的方法是询问作者是否可以向您提供源代码。如今,大多数期刊论文中通常都列出了作者的电子邮件地址。
我作为科学家的经验(已发表5篇论文)是,期刊通常不要求发布用于创建结果的代码。这并不是说期刊不会接受这些脚本。许多期刊都允许在线补充材料。一些针对算法的期刊,例如计算机和地球科学等,都要求您添加算法的来源,但这不是一个例外,而是一条规则。
除期刊文化外,对于科学家而言,编码只是达到目的的一种手段。许多不是专业的软件开发人员。由于许多人将代码视为表达科学的工具,因此他们并不急于发布代码。此外,将代码完善到可以发布的程度还需要大量工作。科学家有报酬从事科学而不是编写软件。
通常情况下,实际程序仅是达到目的的工具,而不是本身具有功能的产品。提供源代码的完整详细信息类似于提供用于签署报告的笔的完整图纸和/或PC的示意图。
话虽如此,特别是在邀请同行评审的地方,源代码将可用-尽管以某种形式的保密协议(NDA)-由于程序中固有地包含知识产权。
如果您真的对代码感兴趣,我建议@Buttons的注释是最好的建议:询问他们:)
您引用的论文已经有28页,其中大部分内容涉及与解决问题有关的设计决策(标题中指出)。
该代码是验证设计的最后一步。它并非微不足道,但不是在论文结果中增加价值的部分,特别是如果您要考虑它将占用的空间时。
并非每种情况都相同。有些论文确实给出了源代码,或者至少给出了伪代码。一些编辑器不允许这样做。有些人允许它,但是由于篇幅,作者不包括它。我发布源代码的一本期刊将其格式设置为“数字”,而电子版则将其格式为图像数据,即使我以文本形式提交也是如此。
激励机制很重要,研究人员的激励机制通常是要确保他们可以不断产生相互补充的稳定论文。研究生通常需要3-5篇已发表的论文,然后可以将其转变为论文的各个章节以毕业。初级教师在任期审查之前需要尽可能多地出版出版物。因此,大多数学术论文实际上都是n
一系列论文。例如,您引用的论文建立在一年前同一小组发表的论文的基础上,并讨论了下一篇论文可能涉及的基础。
发布源代码可能使不同小组的另一位研究人员可以发表论文 n+1
在原始作者做之前或至少要发表一篇涵盖该作者希望作为本研究流的一部分内容的重要论文的论文。如果发生这种情况,该研究生很容易发现他或她在研究生院又花了6到12个月的时间,以便产生足够的研究成果来毕业。任期复审时间到来时,教师最终可能会少发表几篇论文。显然,这两者对研究人员的职业都是沉重的打击。再加上一个事实,即学术应用通常是研究小组中多个人研究工作的一部分(直接或因为他们共享某些组成部分),并且研究小组内部存在着不发布可能最终伤害他人的代码的压力。您每天都在工作。
在收集原始数据既费时又高度分散的领域中,您经常会遇到类似的讨论。例如,在天文学中,研究小组可能需要花费数年的时间来收集数据,然后才能获得足够的信息来发表一篇论文。但是他们随后将使用该数据生成一系列论文。研究小组非常不愿意分享超出绝对必要的更多数据集,因为其他小组很容易随心所欲地花费在收集数据上的时间,以获取实际分析数据的收益。
最终,许多代码将被发布,就像天文数据最终被发布一样。当作者到达该系列文章的结尾时,或者从事相似主题的大多数研究小组都使用类似的引擎时,通常会发生这种情况,因此发布代码不再给新的研究人员带来竞争优势。
如果数据和代码的发布速度更快,这对于科学而言将是理想的。但这通常会损害科研人员,在这种情况下,其激励因素至关重要。
作为过去(在学生方面)多次这样做的人:通常,撰写论文的教授甚至根本看不到源代码。他们将让他们的研究生编写代码,然后在完成时只要求最终的可执行文件(甚至只是对结果的确认)。
而且,编写的代码通常还是不太易读,因为学生只是将它们砍在一起以完成工作,并且因为(尽管他们很聪明)没有实际经验的应届毕业生往往不是世界上最好的编码员...
我可以想到的大多数原因已经在这里提出,但我想我还要添加实际发生在我身上的两个原因:
该杂志不知道该怎么办。
对于我正在研究的其中一篇论文,我认为我是绝对的,毫无疑问将包括源代码(本文的重点是数据可视化)和示例数据。因此,连同提交的材料,我附上了电子增补1和2-一个带有我的代码的R脚本,以及一个带有所述R脚本所需数据的CSV文件。
事实证明,该期刊只有在被补充到Word文件中之后才能接受电子补编。在一天的大部分时间里尝试以这种形式获得R脚本后,我放弃了并决定不将代码作为补充。我本可以在大学里托管它的,但是作为一名研究生,我知道我将在大约1年内在那里丢失自己的帐户-如果立即被linkrot所取代,开源就没有任何用处。
我最终将其托管在GitHub上,并在论文中对此进行了引用,但这是因为我确实希望将代码放入其中。我可以看到,尤其是因为该领域的大多数人不使用GitHub之类的东西,只是认为只有少数人会为此付出努力,因为那些人会下载它,并且如果他们真的愿意的话,他们仍然可以通过电子邮件向我发送电子邮件。
该期刊只是不感兴趣
应审稿人的要求,我将有关代码本身的一些小细节插入了一篇论文中,但是它是一本临床期刊(阅读:无任何代码),它不允许电子补充,并且再次添加源代码可能是比它值得的麻烦多。
具有讽刺意味的是,如果有人确实要去寻找代码,它是(或不久将是)开源的,但是我已经在“这正在分散技术的注意力”的边缘上奔跑,因此我决定简短地介绍一下,“使审稿人高兴提到的就是我要做的。
很多时候实现(即软件无关紧要),但是实现确实会影响结果。
任何时候只要实现很重要...绝对应该提供源代码!结果越依赖于实现或计算方法,发布源代码就变得越重要。
我想对作为化学计量师(化学家进行数据分析)处理的代码类型添加几点:
与使用该代码的人相比,编写数据分析代码的人(与我一样)相对较少。“内部编写的自定义代码”并不意味着作者编写了它-可能是同事的代码,因此作者无法发布它。
可能会计划单独发布该代码,并且该代码的作者(或主管)可能会担心,如果以前(部分)将该代码公开,则该新颖性会丢失。
即使原本打算发布代码的期刊并不反对该代码之前已经公开发布,但主管(或IP办事处的某人)的纯粹担心足以阻止该代码的发布。
数据分析代码通常是针对数据量身定制的。没有数据就没有太大意义。(您可能会争辩说应该
以任何方式发布数据,但这是一个不同的问题,这里是不合主题的。)无论如何,在我所,我们将原始数据和数据分析代码与论文一起存档。默认策略尚未(尚未?)使它们公开可用,但一定会根据要求提供。
(关于什么是化学可再现性的传统观点对应于算法的描述(可能是伪代码),而不是实际的源代码)
我的许多同事使用交互式工具进行数据分析,而这些工具没有记录数据分析的步骤。因此,没有可以发布的源代码。数据分析与编程无关,而与实验室方法相对应:在实验室中,您要做事并记下所做的工作并观察。