GNU 是什么?
GNU 是什么?
GNU is a Unix-like operating system that is free software—it respects your freedom. You can install versions of GNU (more precisely, GNU/Linux systems) which are entirely free software.
GNU 工程 创始于一九八四年,旨在开发一个完整 GNU 系统。GNU这个名字是 “GNU's Not Unix!” 的递归首字母缩写词。"GNU" 的发音为 g'noo,只有一个音节,发音很像 “grew”,但需要把其中的 r 音替换为 n 音。
类 Unix 操作系统是由一系列应用程序、系统库和开发工具构成的 软件集合 , 并加上用于资源分配和硬件管理的内核。
GNU 自己的内核 Hurd 仍在开发中,离实用还有一定的距离。因此,现在的 GNU 通常使用 Linux 内核。这样的组合即为GNU/Linux 操作系统。已经有上百万人在使用 GNU/Linux,但他们中的很多人把它误称为“Linux”。
自由软件是什么?
“自由软件” 是权利问题,不是价格问题。要理解这个概念,自由应该是“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。
自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。 更精确地说,自由软件赋予软件使用者四种自由:
- 不论目的为何,有运行该软件的自由(自由之零)。
- 有研究该软件如何运行,以及按需改写该软件的自由(自由之一)。取得该软件源代码为达成此目的之前提。
- 有重新发布拷贝的自由,这样你可以借此来敦亲睦邻(自由之二)。
- 有改进该软件,以及向公众发布改进的自由,这样整个社群都可受惠(自由之三)。取得该软件源码为达成此目的之前提。
我们维护本文来彰显自由软件定义,说明什么软件才合适被称为「自由软件」。
「自由软件」关於「自由」而不是价格,「自由 (Free) 」这个概念并不是指「免费的啤酒」,而是指「言论自由」【因为英文的自由和免费视同一个字: free】。
自由软件所指称的软件,其使用者有使用、复制、散布、研究、改写、再利用该软件的自由。更精确地说,自由软件赋予使用者四种自由:
- 不论目的为何,有使用该软件的自由(自由之零)。
- 有研究该软件如何运作的自由,并且得以改写该软件来符合使用者自身的需求(自由之一)。取得该软件之源码为达成此目的之前提。
- 有重新散布该软件的自由,所以每个人都可以藉由散布自由软件来敦亲睦邻(自由之二)。
- 有改善再利用该软件的自由,并且可以发表改写版供公众使用,如此一来,整个社群都可以受惠。如前项,取得该软件之源码为达成此目的之前提(自由之三)。
如果一软件的使用者具有上述四种权利,则该软件得以被称之为「自由软件」。也就是说,使用者必须能够自由地、以不收费或是收取合理的散布费用的方式、在任何时间再散布该软件的原版或是改写版 在任何地方给任何人 使用。如果使用者不必问任何人或是支付任何的许可费用从事这些行为,就表示她/他拥有自由软件所赋予的自由权利。
使用者也应该有自由改写软件的权利,并且可以将这些软件再利用在工作上或是娱乐上。
使用软件的这份自由权适用於任何人、任何组织、任何电脑系统、任何工作性质,不用特别和软件作者或是其他特别的人或单位报备。
再散布软件的自由必须同时适用於原版和改写版软件的二进制码和源码上,如果无法制作二进制码的版本,则此动作可以略过,但是如果后来的使用者找到其它可以制作二进制码的方式,她们必须有再散布二进制码的自由。
为了成就改写并发表改写版的自由,使用者必须有取得该软件源码的管道,所以,取得源码为自由软件之本。
为了使这些自由成真,只要使用者没犯下滔天大罪,这些自由权利不能被改变。如果使用者并未做错事,而该软件的作者却拥有取消或撤回其许可方式的权力,那么该软件不是自由软件。
但是,如果额外的规定不和上述四项主要的自由权利相冲的话,这些有关散布自由软件的额外规定是可被接受的。例如,另类版权 copyleft 规定说,当重新散布该软件时,作者不能加限制拒绝其他人主要的自由权利,这个规定并不和上述的主要自由相冲,反而更进一步保障了使用者的自由软件权益。
使用者可以付费取得 GNU 的软件,或者,使用者也可以免费取得这些软件,但是,不管使用者是如何取得这些软件的,她/他们必须永远有权利复制或是改写这些软件,甚至 贩售 这些软件。
自由软件因此并不是「非商业软件」。自由软件必须适用於商业用途。自由软件的商业开发模式已很常见;这样的自由商业软件相当重要。
如果不影响到后来的使用者发行改写的权利规定,则额外加入的规范如何将一个改写后的自由软件制作为套件的相关规定亦可行。同理,像这类「如果你用这种方式发行软件,你必须让这个软件也能在这种情况下可得」的措辞也是在许可之下的(这类规定也让使用者有该不该发行该软件的选择)。如果许可证要求「在当你发行修订版时,若先前的开发者要求一份拷贝,则你必须提供」的条件,它也是符合自由的。
在 GNU 工程中,我们使用 copyleft 这类许可方式来保护每个使用者都享有这些软件自由,但是 非 copyleft 的自由软件 也同时存在。我们相信有某些重要的原因使得 copyleft 的许可方式较其它自由软件许可方式要好 ,但是如果你的软件不是 在 copyleft 的许可之下,我们也使用它。
欲知自由软件、以 copyleft 许可的软件、和其它种类的软件的相连性,请见 「自由软件的种类」 一文。
有时候,政府 外销管制 和交易许可的规定会限制使用者全球性散布软件的权利和自由,虽然软件开发者/作者没有权力去排除或是消弭这些限制,但是,她/他们可以、 也必须拒绝将这些条件列入自由软件的使用法则中,如此这般,这些官方规定将不会影响到使用者的软件自由,和自由软件相关的人、事、物也因此不在这些政府部门管辖范围之内。
大部份的自由软件的许可证是基於 copyleft ,而可以加诸於其上的要求类型是有限制的。如果一份基於版权的许可证遵守了如上所述的自由时,那么就不太可能会遇上我们从未预期过的其它类型的问题(虽然偶尔还是会有)。不过,有一些自由软件的许可证是基於合同的条款,而合同可以被加诸较大程度的可能限制。这表示像是这样的许可证,会有许多可能的方式变得受限到无法接受,因而成为「非自由」的。
我们实在无法列出所有无法接受的可能的合同限制。如果一份基於合同的许可证,以一种基於版权的许可证所无法的不寻常方式,限制了使用者,并且不能如本文所述的视为合格〔的自由条款〕,我们将会试著审度这合同,并且很有可能认定它是非自由的。
当谈到自由软件时,最好避免使用「给」或是「免费」这类的措辞,因为这些措辞会给人给人「free」是指「价格上的免费」的误导,而忽略了使用软件自由的真义。有些词语像 「盗版」就有类似的涵义,我们希望自由软件的使用者不会想被这样指称。有关讨论这些措辞的用法,详见 「容易混淆的词语,请尽量避免」 一文,我们也有 「自由软件一词的翻译」 的多种语言版本。
最后,请注意,这些有关自由软件定义的标准需要审慎的诠释。我们根据某一软件选定的许可方式是否符合上述四点软件自由的精神和重点文字,来决定该软件是否符合自由软件的标准。如果某一软件含有不公平、违背上述四点自由软件精神的限制,就算该软件发行了,我们拒绝使用它。有时候,一份许可证会引发一些讨论,在接受它成为一份自由软件许可证之前,需要我们和一些律师法律专家们共同来判断和思考,当我们达成共识的时候,我们会更新自由软件标准,让使用者更容易了解什么许可方式是符合或是不符合自由软件定义的。
如果你对某份特定的许可方式是否符合自由软件的许可方式有兴趣,请见我们的 「许可方式一览表」 一文,如果你感兴趣的许可方式不在我们的列表中,请直接透过 email 问我们。来信请寄 <licensing@gnu.org> 。
可能的情况下,如果你真的需要一份新的许可证,那么在我们的协助下你可以确定那许可证是否真是自由软件许可证,从而避开许多实际上的问题。
开源究竟差哪了
Richard Stallman 著
要说一个软件是 “自由” 的,这意味着它尊重 用户的基本自由:运行这个软件,学习和修改它,以及重新发布它的原版或修改版。这是个关于自由权利的问题,而非价格高低。我们讨论的自由是如同自由言论般的权利,不是免费赠饮一样的大派送。
这几样自由是至关重要的。之所以说它们重要,不仅仅因为它们可以讨好哪个用户,更是由于它们维系着整个社会的凝聚力— 具体说来,就是分享与协作的精神。随着我们的生活与文化日渐数字化,这样的自由精神也随之越来越可贵。在一个充斥着数字化音像与文字的世界中,自由软件日益重要,它本身已经成为关乎着我们基本自由的因素之一。
当今世界中,成百上千万的用户正在使用着自由软件;在印度和西班牙某些地区的公立学校里,全体学生都学习如何使用自由的 GNU/Linux 操作系统。然而,这些用户之中,大多数人却并不了解我们为何开发这个自由系统,又为何建立起整个自由软件社区,以及背后驱动这一切的道义上的逻辑。因为如今这个自由系统,乃至整个社区都被以“ 开源” 一词以蔽之。顺着这个词,一切都被引入了一个完全不同的思维之中。在那里,自由这东西,甚少提及。
从 1983 年起,我们以维护计算机用户自由之名兴起了自由软件运动。在 1984 年,我们发起了开发自由操作系统的计划,并将此系统命名为GNU。借此系统,我们就不必倚赖非自由的操作系统,不再坐视它们肆意剥夺用户的自由。在二十世纪八十年代,我们开发了系统的绝大多数组件。为了保护用户的自由,我们设计了 GNU 通用公共许可证 (GNU GPL),并以该许可证发行大部分组件。
并非全部的自由软件用户和开发者都赞同自由软件运动的目标。1998年,自由软件阵营中的部分成员分裂出来,并以“开源”为名继续开展活动。一开始,由于“自由软件”(free software)一词可能引起歧义,这才提出开源这个说法。但是很快开源这词便开始异化,使得其背后的逻辑与自由软件运动的初衷相去甚远。
一些开源的支持者会认为,所谓开源,无非是用来“为自由软件做市场营销”的。具体说来,就是向那些商界人士展现自由软件的实际好处。同时避免谈及什么对错正误,因为商业大佬们普遍不太喜欢这调调。还有一些开源的支持者干脆就抛弃自由软件道义上的价值观。无论他们持哪种观点,一旦他们开始为开源营销的时候,自由软件运动所珍视的那些价值观就被抛诸脑后。于是,“开源”一词很快就单纯地和各种实用主义的价值观联系起来。比如说怎么能创造一个强大,稳定的软件。很多开源支持者从一开始就把这些价值观推崇至极,也难怪局外人会有如此联系了。
开源软件和自由软件这两个词在很大程度上描述的是同一类软件,但是它们所基于的价值观却有着本质上的区别。开源是指一套开发方法;而自由软件则是一场社会运动。对于自由软件运动而言,自由软件是一个道德底线。因为只有自由软件才真正尊重用户的自由。开源软件则与此不同,开源的哲学是考虑怎么做把软件做得“ 更好 ” — 仅仅从实用的角度考虑好坏。开源的哲学里,非自由软件之所以不好,是因为他们采用了一种劣等的开发方式。而自由软件运动则以为,非自由软件本身就是一个社会问题。解决的方案则只能是抛弃非自由软件,转投自由软件。
“自由软件”,“开源软件”,既然都指的是同类软件,那何必在名字上这么较真呢?恐怕还是有这个必要的。因为不同的词汇传递着不同的思维。尽管现在看来,用另一个名字称呼自由软件可以给你同等的自由,但若要长期维护用户的自由,则必须让人们意识到自由的价值。倘若你想帮助人们做到这点,那么使用“自由软件”这一称呼则尤为重要。
作为自由软件运动的成员,我们并不将开源阵营视为敌人。我们的敌人是专有(非自由)软件。但我们希望人们至少应该知道,我们所捍卫的是用户的自由。所以我们不愿被开源支持者们贴错标签。
实践中,开源与自由软件的区别
在实践中,开源的要求比自由软件宽松一些。据我们所知,几乎所有的自由软件都是开源软件。尽管大多数开源软件也同样是自由软件,但会有一些例外。首先,有些开源许可证对用户过于苛刻,它们就没有被列为自由软件。幸运的是,只有很少的软件会使用这些许可证。
另外,还有更重要的一点。很多产品会具备计算机的功能,上面会运行着自由软件。然而,如果你把这些自由软件做了修改,再安装回那些设备上,这行为则在很多设备上无法完成。换言之,这些设备制造商会禁止用户安装或运行修改后的自由软件(这包括许多Android设备),而只允许制造商授权的人或单位修改用户设备上的软件。我们把这种设备称作“tyrants”,即“专制暴君”;把这种行为称为“tivoization”。这个词源自TiVo公司生产的机顶盒。它们的机顶盒基于GNU/Linux系统,使用了很多自由软件。用户可以使用该产品,通过互联网观看视频节目。虽然TiVo公司按照许可证,发布了源代码,但是却禁止用户在机顶盒上运行自己的程序,或重新安装系统。这是我们见到的第一个“tyrant”。在这样的产品上运行的软件,哪怕是以自由软件许可证发布了代码,但是运行的二进制版本却不能被认为是自由软件。因为它们同样限制了用户的自由。而它们却符合开源软件的定义,因为开源软件仅仅通过软件许可证来界定开源和非开源。
关于“自由软件”和“开源”的常见误解
在英语中,“自由软件”,即 Free Software,这个词很容易被误解:Free一词既有免费的意思,也有自由的意项。而我们所谓的自由软件,则是“一类可以赋予用户指定自由的软件”。要解决这个问题,我们发布了自由软件的定义。为了方便理解,我们解释自由软件中 Free,是自由言论中所说的自由,而非免费赠饮中的免费。这显然不是个理想的解决方案,它无法完全杜绝这一问题。一个意思正确,又没有歧异的词显然更好些,不过前提是这词不会引起其他麻烦。
可惜的是,在英语中,能替换 Free 的词都多少有点毛病。我们考量了许多别人的建议,然而没有哪个比其他的更”正确“点(比如说,在某些情况下,法语和西班牙语中的“libre”一词更好点。可是印度的人就根本不认识这个词)。每个可能替代“Free Software”的词多少都会有些语义方面的问题—这显然也包括“开源软件”(Open Source Software)。
开源软件的官方定义(它是由开源促进会发布的,鉴于这个定义过长,就不在本文中全部引用了)是直接从我们对于自由软件的界定衍生而来。不过二者也有不同,在某些方面,开源软件的定义比自由软件更宽松。不过总体而言,开源软件的定义和我们自由软件的定义在很多地方都是等价的。
可是,“开源软件”的字面意思—同样也是人们普遍以为的意思—是“你可以看到源代码”。这样的意思比起自由软件定义来说要宽松的多,也比开源软件的定义宽松多。这样的字面意思囊括了很多既非自由也非开源的软件。
由于“开源”一词的字面意思与开源支持者的本意不同,导致很多人误解了这个词。这里引用一段Neal Stephenson文章中的话,“Linux是‘开源’软件,意思很简单,就是任何人都可以获得它的源代码”。我觉得Stephenson先生并非有意拒绝或者曲解开源软件的官方定义。恐怕他仅仅是望文生义,可惜误会了开源这词。堪萨斯州政府也曾发布了一份开源软件的简化定义:“开源软件(OSS)即一类计算机软件,用户可以免费且公开地获得其源代码;用户可以对其源代码做哪些操作,则根据软件的许可证规定各有不同”。
还有更糟糕的,纽约时报发表了一篇文章,把开源这词的意思完全拧了,文中将开源软件解释为内测版软件—就是给一小撮用户做测试的抢先版软件—这东西专有软件开发者在几十年前就发布过了。
开源的支持者们试图通过不断引用官方定义来解决这些误会。这方法显然没错,可直接引述定义对自由软件似乎更有效。“Free Software”一词字面上有两个意思,其中的自由之意是我们希望传达的。一个人如果能理解“自由言论而非免费赠饮”这句话,就不会再搞错该使用Free的哪个意项。然而,“开源”一词仅仅有一个字面意思,而这个意思与其本身要表达的意思又有所不同。结果就很难找一个简单的方法解释官方的定义。这就带来了更多的误解。
另外一个关于“开源”的误解是:开源软件意味着“不用 GNU GPL 许可证”。这个误解又常常伴随着另外一个误解:“自由软件就是使用 GPL 许可证的软件”。这显然是扭曲了自由软件和开源软件。GNU GPL 许可证也被认证为开源软件许可证。很多开源软件许可证也同时是自由软件许可证。除了GPL以外,还有很多自由软件许可证。
“开源”一词又一再地被引申到了各个领域,比如政府部门,教育,科学还有其他压根没有源代码的地方,以及和软件许可证根本扯不上关系的领域。它们唯一的共同点是:多多少少都是鼓励人们参与到某个活动中来。到头来,开源这词就被引申成了“参与性”,或者是“透明性”,或者还不如这些。最可悲的解释,则完全成了一个虚幻的商业流行词。
不同的价值观可以得到类似的结论…可惜总有例外
二十世纪六十年代,美国的极左派阵营曾由于意见分歧而党羽林立。尽管他们实际上有着相同的目的和价值观,但各个派别之间依旧水火不容,关系紧张。这使得右翼势力得以借力打力,进而攻击整个左派阵营。
由于自由软件和开源阵营存在的这种分歧,有些人就用美国极左阵营的例子,来告诫或是诋毁自由软件运动。不过现在的情况和当初极左阵营的情况正好相反:我们和开源软件阵营有着不同的目的和价值观,不过不同的观点却导致了很多相同行为—比如说开发自由软件。
于是大家看到的结果就是:来自自由软件运动的人和来自开源阵营的人经常一起在同一个项目中一起工作,比如一起开发软件。这是值得一提的:尽管大家观点不同,但却可能在同一个项目中工作。当然,我们和开源阵营各自不同的观点有些时候也可能会导致不同的行为。
开源的基本思路是:允许用户修改和再发布软件,是为了让软件更加强大和可靠。可惜这不是个必要条件。很多专有软件的开发者技术也很强。有些时候,哪怕专有软件不尊重用户的自由,依然可以开发出强大而可靠的软件。对于这个事实,自由软件支持者和开源阵营的人对此反应就会不同。
对于一个纯粹的开源狂热者来说—假设他没有被自由软件的理想所影响—可能会说,“你们(专有软件开发者)竟然没用我们的开发模型,还能开发出这么好的软件。这太让我感到意外了。能给我拷一份你们的软件吗?” 这样的态度会让专有软件的诡计得逞—剥夺我们的自由。
而自由软件支持者则会说,“您的软件非常吸引人,不过我更看重我的自由。很遗憾,我不得不放弃使用您的软件。我会支持一个项目,开发一个实现类似功能的自由软件。” 你若真心珍视你的自由,我们就可以用行动去捍卫它。
强大而可靠的软件,未必是个好东西
大家都希望软件强大而可靠,因为我们都觉得软件是为用户服务的。既然是为用户服务的,那强大而可靠的软件显然可以更好地服务用户。
但是必须要明确,只有当软件尊重用户的自由时,我们才说软件是在为用户服务。倘若软件本身就有意剥夺用户自由,为其设置各种障碍,那么如此的软件更强大仅仅意味着更多的羁绊,更可靠也就意味着这些障碍难以克服。现实生活中,恶意流氓的功能在专有软件中比比皆是:监视用户,限制用户,后门,强制升级等等。而一些开源软件支持者们竟希望在他们的开源软件中实现类似功能。
迫于电影和唱片公司的压力,越来越多的个人软件被设计得有意限制用户的行为。这种恶意功能的官方讲法是数字版权管理(参见DefectiveByDesign.org)。这种功能与自由软件的核心精神完全背道而驰。说起来,这已然不仅是精神层面背道而驰了,在实际操作上,DRM 的开发者们试图让用户无法修改软件,甚至将此视为违法行为。
尽管如此,一些开源软件的支持者们依然提议开发所谓“开源 DRM”软件。这背后的逻辑是:发布这些限制用户自由的软件的源代码,并且允许用户修改它,就可以造出更强大可靠的软件,来继续限制用户的自由。然后,这些软件会被拷贝到某个设备上一并卖到你手里,而那个设备则禁止你修改运行其上的软件。
这样的软件也许称得上是开源软件,并且也的确用的是开源的开发模式。但是它不可能成为自由软件,因为它根本没有尊重用户的自由。倘若说开源的开发模式可以成功地制造如此软件,并且让这些软件更强大更可靠,进而限制你我的自由,那只能说这次开源把一切变得更糟了。
令人生畏的自由
当年那些人之所以从自由软件运动中分裂出来,发起开源软件运动,主要原因就是因为“自由软件”的道德基础让不少人如坐针毡。的确如此,倘若说起道德,比如用户的自由,开发者的责任等等,往往会迫使人们去思考一些常被忽视的问题,好比说某些行为是否符合道德规范。这种说教确实会让人心生不快,有些人则因此把它们抛诸脑后,从此不闻不问。但这并非意味着,每当论及道德,我们就该退避三舍,闭口不谈。
遗憾的是,开源的领导者们恰恰是选择忽视了这些问题。他们意识到,只要在道德和自由方面装聋作哑,转而只讨论某些自由软件当下可以创收多少效益,就没准能让他们更高效地“卖”软件给一些特定用户,尤其是商业用户。
从这套理论的观点看,这方法倒也真算行之有效了。开源这词说服了众多商业和个人用户,使得他们他们开始使用,甚至开发自由软件,由此扩大了我们的社区。然而如此的扩张仅仅是表面上的,停留在仅仅关注实用的层次上。由于开源的哲学仅仅停留在实用层面,进而阻碍了人们理解自由软件更深层次的含义。它为我们的社区添加了新鲜血液,却没能教会那些新人如何维持这样一个社区。至此为止,倒也还好,但它还不足以捍卫自由。把用户吸引到自由软件社区来,仅仅是万里长征的第一步,他们还需要懂得去成为自己自由的维护者。
这些没能理解自由软件含义的用户,早晚会出于某些实用角度的考虑,再转投专有软件。无数的软件公司已经开始做出这样的尝试吸引用户使用专有软件,哪怕是发行免费的专有软件。用户只有在懂得珍视自由软件赋予他们的自由之后,才会拒绝如此诱惑。所以,我们必须反复强调自由,才能渐渐扩散自由的理念。“保持沉默”的信条在商业化的过程中可能会有用,但过分强调它,让热爱自由被视为自私,则会害了整个社区。
如此的危机恰恰是我们当前面临的。众多参与自由软件社区的人们,尤其是自由软件的发行商们,对于自由总是闭口不谈 — 往往是因为他们想要“在商业上被认可”。几乎所有 GNU/Linux 的发行版都会在其基础版中搀入专有软件。它们甚至将此宣传有一种优势,而非缺陷。
带有专有插件的软件,和含有专有软件的 GNU/Linux 发行版之所以有生存和发展的空间,就是因为我们社区中大多数人并没有坚守自己的自由。这并非巧合。大多数 GNU/Linux 用户是被“开源”一词吸引而来,而开源则没有把维护用户自由作为其目标。无视自由的言论口口相传,漠视自由的态度比比皆是。人人如此,互相影响。要扭转这样的局势,我们唯一能做的,就是更多地谈论自由,而非把它搁置一边。
总结
开源的支持者们把一个个用户拉入他们的阵营,而提醒用户维护自由的任务,则落到了我们自由软件支持者们的肩膀上。我们要敢于用比以往更大的声音说“这是自由软件,它才是真正尊重你的自由的软件!”—每当你把“开源软件”一词替换成“自由软件”的时候,你就是在支持我们的运动。
脚注
Lakhani 和 Wolf 在关于自由软件开发者动机的 论文 中提到,很大一部分开发者都认为软件本该自由,由此才参与开发自由软件的。可惜他们的调查的是SourceForge上的开发者,而SourceForge网站本身则并不认为软件自由是个伦理问题。
GNU 工程的哲学
自由软件运动的的哲学,激励着我们不断进行 GNU 自由软件的开发。本页面介绍 GNU 的哲学。
自由软件关乎用户的自由:人们应当可以以任何有价值的方式自由地使用软件。软件不同于生活中的事物 — 它不同于椅子、三明治或是汽油 — 软件可以更容易地被复制或修改。恰恰是这一特性,使得软件更为有用。我们由此坚信,软件的这一天然属性应该被用户利用。
在上面的菜单中选择相关的章节了解进一步的信息。
GNU 是什么?的更多相关文章
- 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE
C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目
在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...
- GNU Readline 库及编程简介
用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...
- GNU Radio Radar Toolbox
GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...
- gnu coreutils-8.25 for win32 static - Beta
gnu.win32-coreutils-8.25.7z 2.7 Mb bc-1.06.tar.gz coreutils-8.25.tar.xz diffutils-3.5.tar.xz gawk-4. ...
- window下搭建c开发环境(GNU环境的安装)
一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...
- GNU make使用变量⑤变量的引用、定义等
在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...
- (转)完全用GNU/Linux工作 by 王珢
完全用GNU/Linux工作 王珢 (看完这篇博文,非常喜欢王珢的这篇博客,也我坚定了学gnu/linux的决心,并努力去按照国外的计算机思维模式去学习编程提高自己.看完这篇文章令我热血沸腾 ...
- Gnu/Linux的学习探索
1.Gnu/Linux是一个基于POSIX和UNIX的多用户多任务 支持多线程多CPU的类UNIX的操作系统. 继承了UNIX以网络为核心的设计思想 是性能稳定的多用户网络操作系统. 1991年10月 ...
随机推荐
- Kail Linux渗透测试之测试工具Armitage
Kali Linux下的Armitage是一个很强大的渗透工具,图形化操作页面,但我们把kali linux装在虚拟机里面,然后再启动armitage就会出现一个error,他会给你一个message ...
- HDU 1285 确定比赛名次(拓扑排序模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意:有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行 ...
- mac os版本Intellij IDEA 搭建spring mvc的maven工程(新手教学)
由于近期换了新公司,又换mac pro作为新电脑,打算把用了很多年的eclipse换成IDEA(IDEA比eclipse的好处我就不多说了),由于mac os和IDEA刚开始用不久,所以专门用一篇博客 ...
- EF – 5.DbSet与DbContext,数据更新奥秘
5.6.4 <DbSet与DbContext> 介绍DbSet与DbContext中的核心属性及重要方法. 5.6.5 <数据更新的奥秘> 这一讲极为重要,因为它揭示出了En ...
- 微信小程序-怎么获取当前页面的url
getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面. https://developers.weixin.qq.com ...
- **[权限控制] 利用CI钩子实现权限认证
http://codeigniter.org.cn/forums/thread-10877-1-1.html 一直没找到CI的权限认证扩展,以前好像找到过一个老外的扩展,不过不怎么好用,现在记不清了, ...
- 「Ionic」WebStorm的使用錯誤-
前言:遇到這個錯誤,不要慌張,搶按照濤叔下面的方式處理就可以了. 1.Couldn't find ionic.config.json file. Are you in an Ionic project ...
- vim进阶-自己设置vim编辑器
我这是最基础的一些vim设置,参考文章http://blog.csdn.net/huiguixian/article/details/6394095 看大牛设置的vim,感觉很花里胡哨,以后慢慢接触: ...
- PHP 中文乱码解决方式
1.PHP代码在PHP Storm中乱码,设置PHP Storm的默认文件编码格式为UTF-8: 文件->设置->编辑器->文件编码->将所有默认编码调整为UTF-8: 2.对 ...
- Java 中(静态)变量、(静态)代码块的执行顺序
Java 中(静态)变量.(静态)代码块的执行顺序 非原创 本文讨论 Java 中(静态)变量.(静态)代码块的执行顺序 首先创建 3 个类 1.Foo 类 public class Foo { pu ...