现代软件产品中还剩下多少原始代码?[关闭]


32

你们当中许多人都在为大型公司提供知名软件。我想知道,现代大型应用程序(例如Firefox,Photoshop,Windows,Linux等)中还剩下多少原始代码(基本上是“ v1.0”版本的代码)?我真的更喜欢第一手经验和真实的战争故事。

感谢您满足我的好奇心。

编辑

原来有一定程度的误解。我所追求的基本上是以下内容:责备 / 注释源代码时,自最初的1.0版本以来,是否有任何部分甚至整个文件没有被修改过。


37
一条河从山上流下来。水蒸发并浸入地下。新水从其他溪流到来。当河入海时,是同一条河吗?你怎么知道?如果没有单个分子完成从山顶到大海的整个旅程怎么办?如果没有相同的分子,我们怎么能说是同一条河?而且,这个问题比关于河的愚蠢故事还有什么意义呢?
S.Lott

4
这个问题开始时还可以,但是这句话“我真的更喜欢第一手经验和真实的战争故事”。只是邀请答案的名单说:“我们仍然有原代码的X%”,其中X从0到100
ChrisF

10
@Anton Gogolev:重点是这个。为什么这么问?我的实际经验包括两种产品,其中80%与1.0相同,0%与1.0相同。那是我的经验。您以前不知道的现在知道什么?您解决了什么问题?这对您有什么帮助?
S.Lott

4
@ S.Lott我很茫然……好奇心?知道我们中某些人正在运行的Windows 7 Ultimate仍然具有可追溯到Windows 3.1的代码,这是否令人着迷?
Anton Gogolev

6
@Anton Gogolev:“好奇心?” 抱歉,这对我来说毫无意义。如果回答是17%,那又如何?从该观察中得出什么?
S.Lott

Answers:


36

比您期望的还要多,而且比您期望的要古老得多。即使使用“完全重写”和大型重构,仍有许多模块保持不变。

Péter建议,例如,在Firefox中找不到旧的Netscape代码。这是错误的,如果您搜索源代码,则会发现许多带有免责声明的文件,例如:

* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1994-2000 

例如,在Linux内核标头中,您可以找到以下内容:

include/linux/if_ppp.h: * Copyright (c) 1989 Carnegie Mellon University.
include/linux/quota.h: * Copyright (c) 1982, 1986 Regents of the University of California. 
include/linux/coda.h:          Copyright (c) 1987-1999 Carnegie Mellon University
include/linux/mc146818rtc.h: * derived from Data Sheet, Copyright Motorola 1984 (!).
include/net/slhc_vj.h: * Copyright (c) 1989 Regents of the University of California.

1
Firefox充满了十年的代码。
kizzx2 2011年

1
嘿,它仍然有效(可能)
Callum Rogers

1
@Callum Rogers:它可以运行,但是效果不佳,而且运行速度很慢。。。
安托

2
MPL要求添加“ Initial developer”(初始开发人员),但这并不意味着该文件是最后一次被触摸的时间。Firefox有很多旧代码,但是如果速度很慢,则不会,因为它的速度太慢,任何人都不会注意到。
Paul Biggar

3
@ kizzx2代码不会生锈..

27

我不知道多少,但是肯定有旧代码,但是慢慢地被删除了。例如在Windows 2008或Vista中,使用资源管理器转到c:\ windows \ fonts,右键单击左窗格,然后选择“安装新字体”。显示的对话框是Windows 3.1天(请检查屏幕截图)。如果您在Windows 7中看到相同的内容,则它现在是一个更好的控制面板,如UI。

安装新字体对话框


+100其实我这个发现自己几年前
尼古拉Reuschling

是的,那是... msoOldStyleDialog(?),好的,仍然支持已完成的旧版程序,因此保持在1.0.x。就像一个简单的文件选择器。尽管在这种情况下,这只是对话的问题,他们在GUI大修期间错过了对话。
Henrik Erlandsson

6

我不知道工作的代码有多旧。我只能追溯到将其放入Subversion的时间,还有很多事情可以追溯到那时。

但是,我有一个从事Microsoft Office代码工作的朋友。几年前,他告诉我他从中删除了一些SaveA5World调用。该调用在使用M680?0处理器的旧Macintoshes上是有目的的,自苹果在90年代初使用PowerPC Macs以来一直没有用。

根据我的观察,公司所依赖的任何功能强大的软件系统都是使用没人真正想要使用的技术构建的。


2

“如果他们从一开始就做得非常出色,那么很大一部分,否则就是一小部分。”

严格的语言显示出此特征。尼克劳斯·沃思(Nicklaus Wirth)的语言几乎不需要更改,因为它们是经过精确计划的。(对于Delphi,这实际上已经改变了,并且随着即将发布的通用部署版本将会改变。)

当然,这也有另一面。确定原始代码已经足够好,例如在Microsoft Windows或可爱的应用程序(例如ACDSee),文本编辑器或著名的“ Linux精神”命令行应用程序中。

即使对于那些一开始不喜欢它们的人来说,这些应用程序似乎笨拙,但它们显示了精心计划的特征以及明确定义的功能集;即使他们没有钟声和口哨声,也可能是首选。它们可以发挥作用,向后兼容性很好,并且将来可能会继续正常运行。

如果您按功能集进行操作,那么从5.0版开始,Photoshop将具有90%的相同代码。; P是吗?没有为什么?出售更新。您今天无法真正做更多的事情。

文件管理器的功能集,直到它想要进行FTP,Web和云计算的程度,在任何十年级的平台上都基本相同。此类应用程序仍未达到1.0的唯一原因是由于不良的计划,一时的兴致,对更新的渴望-以及在最小程度上使应用程序周围的环境发生了变化。

答案是某些宝石停留在1.0或1.0.x,因为开发人员已决定功能集,完成了一个无错误的程序,或者不能从不断添加内容和修复所添加内容中的错误中获利,或者已经转移继续开发更多宝石。

所有其他情况都不太可能保留在1.0中的代码附近。如果您有个好主意,为什么不应该重写应用程序呢?您应该,编码很有趣!:)除非这不是许多现代软件产品中发生的事情。为了变更(销售)而不受功能集的推动而进行变更,并且在较小程度上进行更新以适应不断变化的平台,这已成为日常工作。

在不断更新的软件相互影响的汤中,很少有代码库可以逃脱修订。仍有一些人梦想着实现基础和模块化(并且不会过早地发布),但是绝大多数都停留在发布-修订-更新周期中。


-2

甚至表面上用于游戏的“尖端”系统,例如iD Tech和Unreal,仍然会有相当多的1.0代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.