在复制和粘贴代码之前,您必须确保拥有复制和粘贴该代码的合法权利。没有这种合法权利,你就会偷走其他人的知识产权。那只是懒惰。
Stack Overflow上的大多数代码都是“代码片段”。它们不符合原创性标准,因此没有版权保护。您可以自由复制和粘贴它们,而无需担心会丢失诉讼。
Stack Overflow上的一些代码比'snippets'长得多。因此,他们有资格获得版权保护。默认情况下,Stack Overflow上的所有内容(包括代码)都是根据CC-BY-SA 3.0许可证获得许可的。
建议不要在软件中使用此许可证,因此SO目前正在寻求将此许可证替换为其网站上发布的未来代码。但就目前而言,CC-BY-SA 3.0是法律。即使SO确实改变了其未来的许可政策,所有以前的代码仍将保留在CC-BY-SA 3.0下。
CC-BY-SA 3.0就像GPL 3.0一样是一个copyleft许可证。基本上,您可以使用CC-BY-SA 3.0下许可的所有代码,只要:
但是,您可以执行一些法律向导,将您的Stack Overflow代码从丑陋的CC-BY-SA 3.0重新许可为适用于软件的适当开源许可证。这是怎么回事。
有一个“代码段”无版权保护的代码,一个更大的块来区分没有真正的方法不包含版权保护(从而在CC-BY-SA 3.0许可)。您可以使用常识来判断某些代码是否有资格作为“代码段”,但如果法院对您的“代码段”的定义不同,那么您就是运气不好。
如果您正在使用许可或专有代码库,则有四种选择。
这是一个循序渐进的指南:
这种方法比传统的“CTRL-C,CTRL-V”复制和粘贴方法慢。但是,它确实有助于您更深入地了解Stack Overflow代码。这可能会有所帮助,因为您将来可能需要维护此代码。
最后一点在本章中得出结论。某些用户可能会向其向Stack Overflow提交代码提交许可许可。在这种情况下,您可以选择遵守此许可许可的条款,而不是担心Copyleft CC-BY-SA 3.0。检查发布“代码”的用户的配置文件,以查看代码是否在其他许可证下可用。
从Stack Overflow复制和粘贴代码时,最佳做法是提供指向您获得该代码的位置的链接。这有两个原因:
有时,在项目过程中,原始的SO代码会被您严格修改。在这种情况下,保留归属是没有意义的,因为你彻底破坏了原作者的工作。没有理由再赞美作者了,由于你自己的修改,作者的详细解释可能无济于事。尽快从代码中删除评论。
在决定何时给予归属以及何时将其删除时,请使用您的专业判断。
请注意,虽然“代码段”通常不需要归属,但如果您遵守许可条款(默认CC-BY-SA 3.0或许可许可),则通常需要它们。
通常,当您在Stack Overflow上搜索问题时,通常可以找到问题的答案。这并不总是一件好事。
这就是为什么盲目地将第一个答案复制并粘贴到Stack Overflow问题上是一个绝对可怕的想法。我做到了 它永远不会奏效。
相反,向下滚动以阅读问题的所有答案,以及对答案的所有评论。它们将为您提供更多信息和说明,以便您可以更明智地选择要复制和粘贴的代码。另外,请考虑查看Stack Overflow的侧边栏,并查看链接的问题和相关问题。
查看问题的日期及其答案也很有帮助。Stack Overflow是一个历史悠久的网站,了解内容的发布日期确实有助于了解内容是否是最新的,或者是否可能被更新的内容过时。这并不意味着你应该仅仅因为一年或两年就拒绝回答。但它确实为您提供了额外的数据点,以帮助您进行专业判断。
如果您对问题及其答案不满意,请不要担心。进一步搜索。Stack Overflow倾向于对一遍又一遍地问同一个问题的人皱眉头。但它仍然经常发生。通常这些问题最终会被关闭为“重复”,但它们不会被删除,仍然可以正常访问。搜索这些“重复”的问题,您可能会发现比所谓的“规范”版本更好的答案。
最后,请记住,您不必仅复制和粘贴一个代码段。你当然可以混合搭配不同的方法。如果您希望为复制和粘贴的所有不同代码段提供归因,则可能会出现问题,但如果出现此问题,通常可以解决此问题。
Stack Overflow结构为Q&A网站。用户提问,人们回答问题。该网站正式劝阻“讨论”,人们在谈论无休止地解决问题的正确方法。相反,你应该迅速得到你真正的问题的答案。
因此,在Stack Overflow上,很难偶然发现现成的程序,你可以盲目地复制和粘贴。在Stack Overflow上,代码旨在解决独特和专业的问题,而不仅仅是呕吐出一个完整的工作程序。
这不,如果你去到位于更广泛的协议栈Exchange平台上的其它Q&A网站(这是“堆栈溢出”在托管)的情况。诸如“Code Review”或“Code Golf”之类的问答网站充当“现成代码”的存储库。
位于“Code Review”或“Code Golf”上的所有代码均在CC-BY-SA 3.0下获得许可(就像“Stack Overflow”上的代码一样)。它们中的大多数都不是代码片段......毕竟,它们通常是完全成熟的工作程序,而不是一行或两行代码。
将有问题的代码翻译成另一种语言也算作衍生作品(毕竟,你受到某人编写自己版本代码的启发),所以你仍然必须遵守CC-BY-的条款SA 3.0许可证。
如果您正在运行copyleft代码库,则在“Code Review”或“Code Golf”上使用代码不会涉及法律问题。如果您正在使用专有或许可的代码库,那么您可能已经考虑执行我在代码许可章节中讨论过的伪“洁净室”实现。
使用Code Review和Code Golf查找“现成代码”并不是一个好主意。代码托管网站(例如SourceForge,BitBucket和GitHub)已经存在“现成代码”,其形式为具有适当软件许可的开源软件。在那些符合您自己独特需求的网站上找到“现成代码”更容易。
使用Code Review和Code Golf中的代码也可能相当不道德,因为您只是利用了所有内容在CC-BY-SA 3.0下的Stack Exchange上自动获得许可的事实。在“代码审查”上发布FizzBuzz代码的人希望审查自己的代码,而不是让您重复使用它。
但是,您可以合法地复制和粘贴Code Review和Code Golf中的代码。有关所提供代码的答案和评论也非常有用,理论上可以提高您自己的编码能力。
我的意见
程序员遇到问题,在网络中搜索,必然会遇到,学习如果更好的使用这个网站,能够提升自己解决问题的能力。