FreeBSD大败局

f12f9ac31d7d440d0a043b0a7cbead49.png

文 | 肖滢&lola

策划 | lola

出品 | OSC开源社区(ID:oschina2013)

看过上一篇文章《还有人记得 Linux 之前,那个理想又骄傲的 BSD 吗?》的读者都知道, BSD 是 Unix 最重要的一个开源分支,这一本该坐上“开源头把交椅”的操作系统家族承受了一场足以记载史册的浩劫。

时间倒回三十年前。1993 年,那时候 BSD 正处于水深火热,Linux 刚诞生没多久,Meta 杂志 问 Linus Torvalds:能不能推测一下 Linux 在市场上对 Unix 的影响?当时,Linus 的回答是:

I have gotten various mails and seen some newsgroup messages about persons who have switched over already or would like to switch over once Linux is able to run commercial binaries, but at least so far, I doubt Linux has dented the real Unix market very much.

尽管我已经看到一些人已经或者想要切换到 Linux,用于运行商业二进制文件。但目前为止,我不认为 Linux 已经严重削弱了 Unix 的市场。

彼时,Linux 初出茅庐,尽管锋芒毕露,但谁也不知道以后到底会发生什么。须臾三十年,形势调转,Linux 现在的地位有目共睹。

另一边,BSD “灾后重建”且大受欢迎的 386BSD 因为内部意见不同出现问题,其中三个补丁包协调员 Nate Williams、Rod Grimes 和 Jordan Hubbard 另起炉灶,于 1993 年创建了 FreeBSD。尽管还有 NetBSD 和 OpenBSD,但后来的事实证明,FreeBSD 发展最好、走得最远,是 BSD 世界里的“扛把子”。

dcaeb9a5dadd0001f6fabdd88e1bab16.png

在之后的日子里,FreeBSD 没能重现 BSD 的往日荣光,反而一直生活在 Linux 的阴影之下。“Linuxism” 成为 FreeBSD 内部常常挂在嘴边的一个词,其中透露出酸酸的比较之味。

一方面,FreeBSD 坚定地沿袭 Unix 的一些传统,坚决地想要与 GNU/Linux 保持距离;另一方面,FreeBSD 也在积极地寻求更长足的发展,想要至少在某些方面保持优势。

 世事如棋局,得势者得天下。以势定夺,怎么看 FreeBSD 领到的剧本都是一个“大败局”。

01、成也 BSDL,败也 BSDL

正是我们的许可证,使得我们独一无二。与 GPL 尤其是 GPLv3 相比,BSDL(BSD 许可证)对很多厂商来说是非常重要的。

2021 年 3 月,FreeBSD 13.0 版本最新发布。在一场采访中,FreeBSD 内核开发者 John Baldwin 如是说。

他说得没错。许可证是 BSD 一族与 GNU/Linux 最显著的不同,它彰显了 FreeBSD 所继承的、与 RMS 提倡的 “Free” 完全不同的 “Libre” 哲学态度,使得以 FreeBSD 为代表的这些开源软件自成一派。

在 GNU 理念里,软件本该自由,专有软件不应该存在。因此,GPL 被设计得具有传染性,并且要求所有修改后的代码都要返回上游,当初 Linus 选择 GPL 正是看重后面这一点。而 BSDL 则更接近于“公共领域”(公共领域的作品属于公有文化遗产,任何人可以不受限制地使用和加工它们),几乎给了使用者最大权限的自由,不但可以自由地使用、修改源代码,不需要返回任何修改,还可以将修改后的代码作为开源或者专有软件再发布。

28f05d73d8982354adda0800b8a98125.png

我们并不认可 GPL,它是一种政治宣言。我们想要将我们的许可证与政治分开。GPL 会吓跑很多潜在用户,这只会适得其反。

—— FreeBSD 创建者之一 Jordan Hubbard

因此,在之后的实践中 FreeBSD 也在竭力与 GPL 划清界限。多年来,FreeBSD 一直致力于删除基础设施中的 GPL 软件,以便“迁移到现代的、CopyFree 以及许可更宽松的组件”。比如:用 LLVM 的 LLDB 替代 GDB 调试器、使用 BSDgrep 替代 GNUgrep,以及删除 libgnuregex 等等。(其中,FreeBSD 为了完成向 LLVM 的迁移,花费了十年左右的时间,因为 LLVM 是在 Apache 2.0 下获得许可,限制比 GPL 更少。)

53d1011f62f9646723fa1cf437cd1ee8.png

FreeBSD 的这种身份主张无可厚非,但从现实层面来考量这两个许可证,就是另一码事了。

阮一峰老师在《为什么 GPL 是更好的开源许可证?》一文中作了逻辑阐述:

当程序员放弃代码的版权,或者选择 BSD 许可证,他可能认为自己做出了世界上最无私的行为。很大程度上,事实确实如此。但是,我们要知道,这个世界是一个商业利益占主导的世界。一旦发生像甲骨文拥有 MySQL 这一类的事情,你的代码的价值将大大削弱,大公司先是免费利用它们,然后再设法推出取代它们的私有产品。你以为自己奉献了爱心,但是实质上变成了为大公司无偿打工。

从这个角度看,GPL是更好的开源许可证。它保证了自由始终是自由,既无法被剥夺,也不是一种圈套或陷阱。 

FreeBSD 的贡献者就常常被调侃为 Apple 公司的无薪员工。Apple 将社区工作都纳入了 FreeBSD,在其基础上进行了一些更改,就变成了一个专有的、非自由的操作系统。

糟糕的是,Apple 还对内核和其他部分进行了分叉,并将其命名为 Darwin,这一系统基本就远离了 FreeBSD 的传统。而且,由于 Apple 支付了版税,他们可以合法地将其称为 Unix,但这笔钱也没有流向 FreeBSD。

更过分的是,相较于 Netflix 等,同样是 FreeBSD 受益者,Apple 为上游做贡献的积极性也不足(因为 BSDL,贡献上游这事就全凭自觉了)。但 FreeBSD 的人对此倒也看得开:“我不会因此而责怪他们。FreeBSD 是一个 BSD 许可的项目,而不是 GPL。”John Baldwin 表示。

BSD 许可证就是一个复制中心,可以为所欲为,但我们不在乎。

—— Marshall Kirk McKusick ,他亲身参与了 4.3BSD 和 4.4BSD 的开发和发行,后来又深度参与了 FreeBSD

因为 GPL,这种事永远不会发生在 Linux 身上。在 GPL 许可下,任何人都可以使用 Linux,但是有一个强制要求,如果修改后的版本要出售或者提供给他人,则必须根据相同的 GPL 许可把完整源代码对外发布。如此一来,GPL 可以确保 Linux 永远不会成为专有产品,所有开发者做出的贡献最终会回到社区,Linux 可以得到更好的发展。

在 Linus 眼里,GPL 就是他想要的,而不是 BSDL。

许可证是 Linux 成功的决定性因素之一,因为它强制你必须回馈。如果你真的想创造更大的东西,如果你想围绕它创建一个社区,BSD 许可证不一定是很好的许可证。它(BSDL)会让开发人员觉得大公司在利用他们的工作。

144efbc72a18fd77806dc2498e90022d.png

02、 “好东西都给 Linux 了”

Linux 赶上了好时候。

Internet 开始风行之际,Linux 的开发者及爱好者正好能透过 Internet 实时地发布新闻、想法、提问、讨论、递送程序代码及进行错误回报。这种由 Internet 连接起来的分布式合作方式带给了 Linux 惊人的活力。这种生命力直接将 Linux 送上了可以与 BSD 分庭抗礼的位置。

与此同时,在 Linux 现身之时,刚好是人们开始买得起个人计算机时。那是还没从诉讼中缓过劲的 BSD 对于当时的个人计算机所使用的 80386 硬件的支持度非常不好,Linux 几乎成为当时大众的第一选择。这一波路人缘,Linux 收割得很漂亮。

BSD 缺位,Linux 趁机发展,刚从灰烬里重生的 FreeBSD 碰上的局面就很残酷:Linux 占据主导地位之后,已经形成马太效应,之后的态势呈现出强者愈强、弱者愈弱的趋势。 

120ca83ba76411d1123da614459b1c9d.png

硬件方面,Linux 可以在许多不同的平台上运行,而 FreeBSD 则不行。硬件设备制造商更愿意为 Windows、Linux 等主流的操作系统提供驱动程序,IBM、戴尔和惠普直接支持在其服务器上运行 Linux,但处于主流之外的 FreeBSD 可能不在它们的考虑范围内。

此外,Linux 的开发者数量比 FreeBSD 多出数倍,这意味着 Linux 拥有更多的贡献者和测试新硬件的机会。长期下来,最终导致 FreeBSD 的兼容性和硬件支持远远不如 Linux。比如,用户需要定期更新图形驱动程序,Linux 可以更早、更快地提供支持。

软件上,Linux 软件包存储库的数量远超过 FreeBSD ,具有更大的灵活性和可用性,虽然 FreeBSD 也提供了预编译的软件包,但它仍然无法与 Linux 可用的资源进行比较。其实,这都是互为因果关系的 —— 因为 FreeBSD 市占率比 Linux 低多了,开发者少,很多软件对其的支持度就不如 Linux,这又反过来加剧了其市占率的下降 —— 一个死循环。

有人评论很是贴切:“所有的好东西都给了 Linux”。

看着 FreeBSD 如今的现状,用户都着急了。2020 年 3 月,一些用户开始在推特上催促 FreeBSD 基金会尽快赞助 FreeBSD,以推进对 802.11ac 支持的开发工作。要知道这个时候, Windows 和 Linux 都提供了对 802.11ac("WiFi 5")的良好支持,并且已经开始将重心放在 802.11ax ("WiFi 6")上了。

4d237b4448e791e50955e43b8bd4940e.png

当时面对呼吁, FreeBSD 基金会进行回复的截图

03、FreeBSD 没有商业布局

Linux 内核是个操作系统“半成品”,企业支持的重要性不言而喻。支持 Linux 的著名企业有 RedHat 、SUSE、IBM 、Canonical 等等,它们不仅贡献了许多实用性很强的发行版,如 Fedora、Ubuntu、Arch Linux、Debian、Linux Mint 等,同时确保操作系统实现快速更新。

有人认为, RedHat 是 Linux 快速进入商用市场的关键性因素之一。因为对于大型企业而言,或许授权费用的多寡并不是重点,他们要的是能够说服上司及股东的解决方案。透过 RedHat 所提供的技术支持,信息部门有了底气将 Linux 列入解决方案之中。

这项优势几乎是 FreeBSD 所难以匹敌的,因为 FreeBSD 几乎没有商业支持。

d51833e21cdfd13bdf46ed89efe193e4.png

开箱即用的 FreeBSD 提供了用于强化系统的选项

因为缺乏商业公司运作的商业版本,为 FreeBSD 提供支持的企业屈指可数,没有大量企业为终端用户提供大规模的技术和服务支持。

在 FreeBSD 13 发行之后的那场采访中,当被问及商业模式问题时,John Baldwin 这样回答:

有很多来自像 Netflix 这样的公司,内部会有FreeBSD 专家团队开发功能,这些工作直接进入上游 FreeBSD。还有一些资源来自学术和业余爱好者。最近越来越多的工作由 FreeBSD 基金会承担,基金会接受捐赠资助。

可以看出,一些接受了 FreeBSD 恩惠的企业的确在以某种方式去推动 FreeBSD 的生态发展,但与 Linux 所得到的商业支持,完全不能相提并论。

就像有人说得那样:“尽管 Netflix、Apple 和 Juniper Networks 等公司都在支持 FreeBSD,但它们并没有像 Canonical 和 RedHat 等公司那样投资它,共荣共生的传奇只发生在了 Linux 上 。”

04、 “大独裁者”未必是坏事

One of the major problems with 386BSD seems to be the lack of co-ordination: that may sound weird coming from the Linux background, but in fact the 386BSD project seems to suffer from a lot of people working on the same thing due to the long release cycle.

The NetBSD project may be a step in the right direction, but I think 386BSD has been hurt by the way it has been developed.

386BSD 的主要问题之一似乎是缺乏协调管理:尽管我以 Linux 的角度和身份来看很奇怪,但事实就是这样,因为较长的发布周期,386BSD 里大量的人都在做同一件事情。

NetBSD 可能走对了方向,但是 386BSD 已经因为这种开发方式受到了伤害。

1993 年,Linus 一语成谶。很快,386BSD 分裂成为 FreeBSD 和 NetBSD。

当时有人总结到:“BSD 走的是教堂式的学院派路线,而 Linux 则是代表了市集式的骇客精神。” Linus 是著名的独裁,而 BSD 对“独裁者模式”的嗤之以鼻是一以贯之的。

有一个古老的笑话是这样的:如果你把 10 个 BSD 开发人员锁在一个房间里,当你打开门时,你会发现比萨饼不见了,BSD 开发人员死了,还有 11 个 BSD 的新变种。

虽然有点自负,但我认为只要我愿意充当傀儡,我本可以阻止社区分裂。当时我在那个位置上已经 10 多年了,我觉得是时候将衣钵传给他人了。老实说,我没想到会这样(指分裂),我以为会出现很多不同发行版而已。

McKusick 曾这样表示。在他看来,Linux 的独裁者模式一样不可取,一旦 Linus Torvalds 离开,就会酿成灾难,Linus 在试图创造超越他自身的一些东西,而“如果我被公共汽车撞了, BSD 不会真正受到太大影响。”

这样左派又带点傲气的观点,真是典型的 BSD 的啊。而 FreeBSD 之后出现的管理和开发方式问题,多多少少也带了一些遗传在身上。

 1f552e2362f92b57ca4128c396e962db.png

从开发过程上看,FreeBSD 与 Linux 最大的不同就是 —— 没有一个大独裁者。

FreeBSD 有一个核心团队,相当于公司里的董事会,他们通过授予、撤销修改、提交新代码到代码库等权利来控制访问,其首要任务是确保整个项目处于良好状态并朝着正确的方向前进,并每 2 年选举一次。

“我们主要用邮件列表进行协作,这与 Linux 内核邮件列表相同。但是,FreeBSD 基础系统是一个单一的存储库,内核、C 库以及工具链,所有基础系统实用程序,如 ls 和 shell,都在一个单一的存储库中,一起构建和发布。” FreeBSD 基金会项目开发总监 Ed Maste 在 2021 年表示。

这种“核心小组”型的模式最大的缺点就是很难达成共识,从而延误时机。FreeBSD 核心团队成员 Benno Rice 就曾探讨过这个问题:

开发项目的源代码是其核心资产,必须妥善保管。所以项目需要一个源代码管理系统。最初,FreeBSD 使用 CVS,这在当时是一个合理的选择,但直到 2008 年 FreeBSD 还在使用 CVS。为什么呢?因为大家对于应该用什么来代替它没有达成共识。考虑过BitKeeper、Git 和 Mercurial,最后都无疾而终了。

很多社区都会反复出现长期的争论,FreeBSD 也不例外。2008 年,经过八年的争论,Peter Wemm 强行推进了向 Subversion 的转换;从那以后,抱怨声相对较少了。

相比之下,Python 从 CVS 开始,2004 年转移到 Subversion,2009 年转移到 Mercurial,现在又转移到 GitHub。在 Python 社区中,一旦 PEP 获得批准,就可以继续进行了,而 FreeBSD 没有这样的机制。

而 Python 社区,又是另一个以独裁者领导而著称的项目。

其实,“核心小组”模式并非只有 FreeBSD 一家,GNU 项目 、Apache Web 等也都采用这种模式。但很明显,FreeBSD 的这个核心团队,并没有做好这份工作。

比如著名的“ Matthew Dillon 事件”(下文会详细说),他们不但没有及时引进相应的行为准则来规范大家的行为,更是对开发者互相掐架、成员参与“Gamergate”在线骚扰活动等恶劣行为无能为力。又比如,因为缺少保证质量代码的审查流程,他们还差点让 4 万行有缺陷的代码混入 FreeBSD 内核里。

05、 “FreeBSD 不会再年轻了”

LWN 是这么评价 FreeBSD 的:

这是一个伟大的项目,但它确实存在一些问题,特别是三点:FreeBSD 很大,它很旧,而且它行动迟缓。FreeBSD 不会变得更年轻了,它难以改变一些根深蒂固的态度。

的确,从 1993 年 11 月开始,FreeBSD 出生就自带故事,而且它基于的代码非常古老。Benno Rice 说,直到 2017 年 FreeBSD 开发人员才发现自动化测试,而要进行自动化测试,软件必须具有正确的结构,但 FreeBSD 这个“老家伙”并不具备。因此,当他在一场活动中看到 Rust 社区有关自动化的演讲时,他就在想:为什么 FreeBSD 不能有这么好的东西?

不光是古老,FreeBSD 还失去了活力。

FreeBSD 联合创始人 Jordan Hubbard 曾经是社区最为活跃的核心人物之一,2001 年他离开了 FreeBSD 社区,去了 Apple 公司,帮 Apple 捣鼓 Darwin。在他的辞职信中,他这么说:

Another reason, and I hate to say this but it probably needs saying, is that being in core is honestly not what it once was. For a old-timer like myself, who was used to a core team that was far more cohesive and generally on the same page, it's simply a painful experience a lot of the time.

Perhaps this is due to overly rose-colored recollections of the old core on my part, and I do certainly recall us having more than our share of disagreement and inefficiency in the past, but on the balance core still feels too much like the pre-WWII Polish Parliment sometimes, where we're fully capable of arguing some issue right up to the point where tanks are rolling through the front door and rendering the whole debate somewhat moot.

还有一些原因,我本不想但不得不说,老实说核心团队已经不像从前了。作为一个老前辈,我习惯了那样的核心团队:更加团结且大家都是一条心,一起经历了许多艰难的日子。

或许是我对旧时光的滤镜太重了,在回忆里我们过去的确有更多的分歧和低效,我们的核心团队实在太“反应迟钝”了(这里用了一个典故,二战时德国都已进入波兰,而波兰国会还在商讨对策)。我们完全有能力解决问题,但就是这样:坦克都已经在门前了,一切辩论都毫无意义了。

 4f0ddbf7f5fa6c193a3dc678b4c45847.png

Jordan Hubbard 

在这副古老的身躯上,当我们掀开 FreeBSD 那袭表面华丽的裘衣,又会赫然发现上面还爬有一些不那么体面的虱子和臭虫。在圈子里,总是会有一些有关 FreeBSD 的“小差评”:

FreeBSD 是一个很棒的操作系统,但 FreeBSD 论坛是我见过的最刻薄的论坛之一。有人在里面寻求帮助却被贬低,并让其滚回到 Linux 社区。

FreeBSD 论坛成员都是 FreeBSD 的狂热分子,当话题涉及到在 FreeBSD 作用不大的组件时,就会被攻击为“Linuxism”。

BSD 论坛一点也不友好。不要在那里问,他们只会让你去阅读手册。你只能靠自己。

在 FreeBSD 论坛寻求帮助,得到的回复往往都是:一定是你做错了,因为 FreeBSD 永远不会错。

当然,人无完人,每个社区都会有这样那样的差评,这些差评或许并不能说明些什么,但是当一些群体性事件爆发出来,FreeBSD 在文化和风气上的短板就暴露无疑了。

其中最著名的就是前文曾提及的“Matthew Dillon 事件”。Matthew Dillon 是 1994 年就加入 FreeBSD 的明星成员。之所以说他是明星,是因为这哥们确实实力过硬,但不合适团队合作,不怎么在乎别人的辛苦成果,是个“Rock-star”式的人物。

当初还在更新 FreeBSD 5 (现在都已经 13 了)的时候,Dillon 想打破 FreeBSD 里一个很大的内核锁,John Baldwin 也想过,于是俩人就一起干了。不出意料,两人在关键部分出现了分歧,Dillon 一意孤行地提交了更改。这引发了非常激烈的争论,在长达一个月的争吵之后,Dillon 退步了,核心团队取消了他的提交权限,他最终也离开了 FreeBSD。

这不是 FreeBSD 里的孤例,还有很多类似的事件发生过。而这件事直接引起了 FreeBSD 核心团队的反思:如果 FreeBSD 当时有既定的行为准则,会不会得到更好地处理呢?

Dillon 走后,Gamergate 事件直接促成了 FreeBSD 的行动。简单来说,Gamergate 是一个与性别政治有关的运动,最开始是一个已经离开的 FreeBSD 成员写了一个 Perl 脚本来阻止 Gamergate 参与者的活动,并惹怒了那批人,使得 FreeBSD 惹火上身;再后来又有 FreeBSD 成员加入 Gamergate 并开始在 Twitter 上攻击那个前成员,这下完全把 FreeBSD 拖下了水。

这一事件不仅引起了激烈的讨论,攻击者随后还将对话日志泄露给了 Breitbart,核心团队别无选择,只能参与进来。

2018 年, FreeBSD 确立了社区行为准则(Code of Conduct,CoC),这一准则从 LLVM 衍生而来,要求社区开发者友好耐心、热情好客、体贴、相互尊敬、对他人友善、注意不要乱说话、持不同见解时多换位思考。

这是一项“修补的紧急工作”,我们最初仍然诚实地认为“精英”意味着“包容”。从那以后,我们学到了很多其他东西。

—— Benno Rice

aa3fdd4c6583f91b12d2e2b0f77b0a52.png

06、结语

2022 年 1 月,FreeBSD  基金会制定了一份时间跨度近 5 年的技术路线图,决定从面向终端用户的改进(特指笔记本和台式机)、商用服务器、工具和应用和虚拟化和容器 4 个方面为重点,以扩大和增强技术团队的实力。

这份蓝图代表 FreeBSD 仍在努力朝更好的方向进发,正如 Jordan Hubbard 所说的那样,现在的 FreeBSD 应该是年轻人的天下,这样才会更具活力。

早在 1990 年代我就用过 FreeBSD,当时我没什么钱,住在政府为低收入者提供的房子里,是 FreeBSD 帮助我摆脱了贫困 —— 在雅虎找到工作是因为我会用 FreeBSD,而 WhatsApp 也是用 FreeBSD 服务器为数以亿计的用户提供服务。    

—— WhatsApp 联合创始人兼 CEO Jan Koum

不管 FreeBSD 这盘棋下得多么艰难、多么不得势,但它给世界带来的一切是如此精彩。

843d5037aff47dfe0b0fa496af6f5d58.png

88f3fd6ea806b3dcb43b9b23b04f22fc.png觉得不错,请点个在看呀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html拖放数据库字段,HTML5 拖放(Drag 和 Drop)

拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}function allowDrop(ev){ev.preventDefault();}function…

谈谈 css 的各种居中——读编写高质量代码有感

css 的居中有水平居中和垂直居中&#xff0c;这两种居中又分为行内元素居中和块级元素居中&#xff0c;不同的居中用不同方法。 水平居中 1、行内元素水平居中&#xff08;文本&#xff0c;图片&#xff09; 给父层设置 text-align:center; 可以实现行内元素水平居中。 <!DO…

.NET遗留应用改造——性能优化篇

由于各种原因我们总是要与公司各种老项目打交道。天有不测风云&#xff0c;谁也不知道这坨屎山会从哪个方向把你的嘴塞的满满的&#xff0c;还不让你吐出来。既然如此...那只能细嚼慢咽的吞下去吧。说实在话&#xff0c;只要业务不死&#xff0c;那些老大伯项目就还有价值。更何…

华为西安工业大学鸿蒙,培养百位将领、19位院士,这所211大学被誉为“华为人的母校”...

在社会上&#xff0c;985工程重点大学认可度是普遍要比211工程大学高的&#xff0c;并且985工程大学实力也比较强。但比较例外的是&#xff0c;华为这个让国人骄傲的企业&#xff0c;对一个211工程大学青睐程度却超过了绝大部分985工程大学&#xff0c;这所211大学甚至还被誉为…

Android Studio之Instant Run requires ‘Tools | Android | Enable ADB integration‘ to be enabled解决办法

1、问题 Android studio运行项目时候出现这个提示 Instant Run requires Tools | Android | Enable ADB integration to be enabled 2、原因 由于新版本中的Instant Run &#xff08;即时运行&#xff09;引起的 官方介绍 即使运行 https://developer.android.com/studio/r…

C# 11 预览,又增加了实用的语法糖

文 | 罗奇奇出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;.NET 首席项目经理凯瑟琳在博客中介绍了 C# 11 的一些预览性新功能&#xff0c;这些功能可以在 Visual Studio 17.1 和 .NET SDK 6.0.200 中体验&#xff0c;下面摘录一部分新特性作介绍&#…

java程序

This XML file does not appear to have any style information associated with it. The document tree is shown below.博客园_首页代码改变世界uuid:5de59c50-a92f-4447-96ed-ab86451ed183;id61182014-07-27T11:59:08Zfeed.cnblogs.comhttp://www.cnblogs.com/jianyus/p/386…

使用Blazor做个简单的时间戳在线转换工具

时间戳转换时间戳转换&#xff0c;关键点在于双向绑定bind-Value&#xff0c;就简单贴源码吧TimestampTool.razorpage "/timestamp" using BlazorComponent.I18n layout PublicLayout<PageTitle>T("TimestampToolTitle")</PageTitle><h2 st…

转载:Pixhawk源码笔记一:APM代码基本结构

转自 新浪微博WalkAnt 基础知识 详细参考&#xff1a;http://dev.ardupilot.com/wiki/learning-the-ardupilot-codebase/ 第一部分&#xff1a;介绍 详细参考&#xff1a;http://dev.ardupilot.com/wiki/learning-ardupilot-introduction/ ArduPilot 代码分为5个主要部分&…

nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下&#xff1a;一、针对10.43.2.134的操作1.安装jdk环境tar zxf jdk-8u5-linux-x64.tar.gz mkdir /usr/javamv jdk1.8.0_05/ /usr/java/编辑/etc/profile在文档的末尾追加如下5行内容&#xff1a;JAVA_HOME/usr/java/jdk1.8.0_05JRE_HOME/usr/java…

.NET6之MiniAPI(十九):NLog

在本系例文章的第八篇中&#xff0c;我们聊过官方的日志实现&#xff0c;即《.NET6之MiniAPI(八)&#xff1a;日志》。但官方的日志功能更多是提供了一个实现基础&#xff0c;对于要求一个灵活&#xff0c;强大&#xff0c;方便的日志体系&#xff0c;官方的还是有差距的&#…

完美:C# Blazor中显示Markdown并添加代码高亮

昨天发了一篇介绍这个库&#xff1a;C# Blazor中显示Markdown文件&#xff0c;介绍怎么在Blazor中显示Markdown内容的文章&#xff0c;文章内的代码是没有高亮的&#xff0c;思来相去&#xff0c;还是要做好&#xff0c;于是百度到这篇文章.NET C# Blazor 服务端渲染Markdown&a…

使用 FieldMask 提高 C# gRpc 服务性能

前言想象一下&#xff0c;有一个服务提供个多个客户端调用&#xff0c;但不是所有客户端都需要全部的返回参数:比如商品列表服务返回商品的所有信息&#xff0c;而订单服务调用商品列表服务&#xff0c;但它其实只需要商品的编码和名称就够了。当然&#xff0c;我们可以为这个需…

HTML accesskey 属性

2019独角兽企业重金招聘Python工程师标准>>> 带有指定快捷键的超链接&#xff1a; <a href"http://www.w3school.com.cn/html/" accesskey"h">HTML</a><br /> <a href"http://www.w3school.com.cn/css/" access…

Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler) 分析

转会http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?cadrs-cn-0125 Linux 调度器简史 早期的 Linux 调度器使用了最低的设计&#xff0c;它显然不关注具有非常多处理器的大型架构&#xff0c;更不用说是超线程了。1.2 Linux 调度器使用了…

在计算机技术方面用英语怎么说,“计算机应用技术”用英语怎么说?

计算机应用技术 :1. Computer Applications Technology中国搜学网-学苑论坛 - 教育话题 - 学习交流 ... ...专利文献检索 The Searches of Patent Literature计算机应用技术 Computer Applications Technology精密电磁测量 Precise Electromagnetic Measurement ...2. Computer…

linux之nautilus .命令浏览当前文件目录

1、比如我们在终端目前想打开这个路径下的文件目录&#xff0c;我们如果再去更加路径一个一个的打&#xff0c;就太浪费时间了&#xff0c;我们可以在终端这个路径下输入下面的命令就可以 ~/Desktop$ nautilus . 2、效果如下图

C# 异步与Windows应用程序

把 async 关键字用于 UWP 应用程序&#xff0c;需要注意&#xff0c;在 UI 线程中调用 await 之后&#xff0c;当异步方法返回时&#xff0c;将默认返回到 UI 线程中。这便于在异步方法完成后更新 UI 元素。注意为了创建 UWP 应用程序&#xff0c;需要 Windows 10&#xff0c;W…

重装系统后恢复oracle数据

2019独角兽企业重金招聘Python工程师标准>>> 由于前段时间重装了系统&#xff0c;今天重装了数据库oracle XE版本&#xff0c;用“移花接木”的手段将新装oracle的目录用原有目录直接给覆盖&#xff0c;于是顺利的启动了oracle服务&#xff0c;然后又打开plsql deve…

java Split 用法

在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必…