比特盒子可以运用在技术开发的源代码python如何保护源代码?

比特盒子的技术原理是什么?_百度知道
比特盒子的技术原理是什么?
我有更好的答案
比特盒子技术原理与所有区块链技术一样
采纳率:40%
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。DELPHI盒子 - Delphi源代码 控件 文档 工具 下载
盒子社区登录
自动登陆(30天有效)
盒子资源分类
站内公告:[12-31]
盒子代码更新列表
&&下+173&浏+1623&
&&下+221&浏+1638&
&&下+85&浏+2475&
&&下+104&浏+3745&
&&下+590&浏+4962&
&&下+495&浏+6120&
&&下+277&浏+4386&
&&下+292&浏+5635&
&&下+251&浏+4256&
&&下+309&浏+4710&
&&下+433&浏+4160&
&&下+967&浏+7308&
&&下+287&浏+5610&
&&下+159&浏+5097&
&&下+174&浏+8030&
&&下+220&浏+6306&
&&下+181&浏+7270&
&&下+317&浏+9220&
&&下+537&浏+13286&
&&下+199&浏+9130&
&&下+227&浏+2653&
&&下+301&浏+2975&
&&下+26&浏+1997&
&&下+107&浏+5238&
&&下+182&浏+3564&
&&下+378&浏+5428&
&&下+91&浏+6031&
&&下+241&浏+6977&
&&下+293&浏+9402&
&&下+358&浏+7615&
&&下+81&浏+1957&
&&下+255&浏+2529&
&&下+190&浏+3525&
&&下+52&浏+2673&
&&下+580&浏+6947&
&&下+72&浏+3450&
&&下+87&浏+3393&
&&下+89&浏+3366&
&&下+140&浏+3497&
&&下+498&浏+5337&
精 品 源 码 列 表
&&下+21&浏+7230&
&&下+85&浏+26345&
&&下+33&浏+12672&
&&下+171&浏+12783&
&&下+107&浏+10881&
&&下+101&浏+12109&
&&下+126&浏+12621&
&&下+20&浏+11479&
盒子论坛列表
<font color="#18/4/10 22:12:57 贴+1 浏+30
<font color="#18/4/10 21:03:30 贴+2 浏+34
<font color="#18/4/10 18:02:02 贴+1 浏+85
<font color="#18/4/10 15:36:52 贴+12 浏+188
<font color="#18/4/10 10:29:10 贴+8 浏+436
<font color="#18/4/10 10:07:40 贴+4 浏+132
<font color="#18/4/9 10:03:12 贴+2 浏+279
<font color="#18/4/8 22:25:21 贴+15 浏+335
<font color="#18/4/8 20:20:31 贴+0 浏+67
<font color="#18/4/8 9:09:21 贴+26 浏+515
<font color="#18/4/6 16:48:37 贴+3 浏+255
<font color="#18/4/5 17:47:41 贴+18 浏+262
<font color="#18/4/5 12:23:09 贴+23 浏+390
<font color="#18/4/5 11:45:55 贴+8 浏+196
<font color="#18/4/4 23:39:32 贴+4 浏+177
盒子社区信息
正在读取统计信息……
盒子首页链接列表
正在读取网址信息……
实用工具:
DELPHI盒子版权所有posts - 497,&
comments - 497,&
trackbacks - 20
&#160;&#160;&#160;&#160;&#160;&#160; 比特币 (货币符号: ?;英文名:B英文缩写: BTC),是一种用于开源的P2P软件而产生的电子货币。比特币全局图是这样的:
在这儿主要介绍Linux下的比特币安装,我们选择 12.04的环境,安装相对容易得多。Windows下并不推荐,因为基于配置相以繁琐。
同时也可以参考build。
&#160; 先拉下源代码:
安装Berkeley DB 4.8以上版本:
sudo apt-get install libdb5.1++-dev
然后进入到相关目录:
cd bitcoin ./autogen.sh
./configure
如果你遇到这样的提示:configure: error: Found Berkeley DB other than 4.8, required for portable wallets 那就可以这样:
./configure --with-incompatible-bdb
如查遇到到这样的提示:checking for boostlib &= 1.20.0… configure: We could not detect the boost libraries (version 1.20 or higher). 那这样:
sudo apt-get install libboost-all-dev
然后再次configure,如果你需要bitcoin-qt前端,那需要安装
sudo apt-get install libqt4-core libqt4-gui libqt4-dev
再次configure,这次可以了
开始编译,大约5分钟,然后安装编译好的二进制文件
make install
想运行前端那执行
bitcoin-qt
bitcoind&#160; -server –printtoconcole
接到下,是否挖矿就看您自己了。以当前时间为起点,连接testnet有9G的blockchain数据需要下载,livesite有35G的数据需要下载。
也可以从这里文件,以加快速度。后续会介绍关于比特币的更多内容。有兴趣可以阅读它的源代码。
资料LINK:
BitCoin比特币 wiki
Bitcoin比特币 源代码文档
Bitcoin比特币 中国
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-。
阅读(...) 评论()&主题:丰田一绝 - 28万行代码竟有1万多全局变量,庞大的bug培养基地
泡网分: 0.405
注册: 2014年09月
http://zzhzbbs.zjol.com.cn/thread--1.html
丰田一绝 - 28万行代码竟有1万多全局变量,庞大的bug培养基地
----------------------------
【第一部分】背景简介
前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展。十月底俄克拉荷马的一次庭审
,2007年一辆2005年凯美瑞暴冲(Unintended Acceleration,UA)致一死一伤事件中
丰田被判有责。引起广泛关注的是庭审中主要证人Michael Barr的证词让陪审团同意丰
田的动力系统软件存在巨大漏洞可能导致此类事件。这是丰田在同类事件中第一次被判
有责。庭审过后丰田马上同意支付300万美元进入调解程序。
出于好奇,我漫不经心地下载了Barr的286页证词,却一下子被吸引住了。几天内读完
,算是对这次事件进行了一次深入了解。下面就从外行角度总结一下这份证词并尝试以
更简单的语言解释里面提到的暴冲原因以及丰田犯下的错误。
Barr的证词下载自他的个人博客Barr Code,但现在该文已经被删除。稍后找地方上传。
Michael Barr是谁?他是一位拥有20年以上行业经验的嵌入式系统工程师。在十八个月
中,有12位嵌入式系统专家,包Barr,受原告诉讼团所托,被关在马里兰州一间高度保
安的房间内对丰田动力控制系统软件(主要是2005年的凯美瑞)源代码进行深度审查。
这房间没有英特网,没有手机信号,他们进出不能携带任何纸张、记录甚至皮带。最后
的调查结果被写入一份800页,13章的详细报告。而鉴于保密协议,调查内容一直没有
公布,直至俄克拉荷马这次庭审才首度部分公开(报告本身似乎还没公开)。
回到正题。丰田的软件有没有缺陷?根据Barr的调查,答案是有。这其实是废话,任何
软件都会有缺陷,关键在于是什么样的缺陷。丰田的软件缺陷分为三类:
非常业余的结构设计。
软件设计的基本要求是模块尽量简单化,因为这样可以一来更易于阅读二来更易于维护
。但丰田的工程师显然没有遵循这原则。Barr使用一种工具自动根据代码的可能分支数
量评估函数的复杂度,结果是丰田的软件中至少有67条函数复杂度超过50,意味着运行
这个函数可能出现超过50种不同的执行结果,属于“非可测”级别。因为为了测试这50
个不同的结果,必须准备至少50条不同的测试用例以及相应的文档,在生产环境中一般
是不现实的。作为比较,Barr表示他自己的公司严格执行的其中一条规定就是任何代码
复杂度不能超过30,否则不合格。而在这67条函数中还有12条复杂度超过100,达到“
非可维护”级别,意味着一旦发现缺陷(Bug)也无法修复,因为实在太复杂,修复缺
陷的过程中会产生新的缺陷。其中最复杂的一条函数有超过1300行代码,146个可能执
行路径——正好用于根据各传感器数值计算节气门开关角度。
如果你不知道什么是节气门,那么这里我稍微解释一下。为了让内燃机运行,有三大要
素:燃油、空气和点火时机。空气和燃油的混合物进入气缸,被火花塞在正确的时间点
燃推动活塞并最终推动曲轴和车轮前进。在电喷技术发明以后直到2002年以前,三大要
素的燃油和点火时间是由电子设备控制,节气门机械连接加速踏板,由司机直接控制。
节气门大致是一个连接加速踏板的“空气龙头”——踩下去越多,“龙头”打开得越大
,允许越多的空气进入发动机输出更大的动力。2002年以后,丰田引入的“电子油门”
让电子系统掌管了最后一个要素:空气。加速踏板不再机械连接节气门,而是连接一些
传感器,由行车电脑将这些传感器数值计算成节气门开启角度再由马达控制节气门。我
们稍后会再讨论节气门开合。
极复杂的代码带来的是极复杂的功能。下面说一下被称为“厨房洗涤盆”的Task X。这
里先解释一下,丰田的软件系统和很多别的软件系统一样,都是由一个统领程序(称之
为“操作系统”)和若干小程序(称之为Task)组成。就好比电脑上跑的Windows是统
领全局的操作系统,网络浏览器和记事本是跑在操作系统上的小程序。丰田的系统里每
个Task都有自己的名字,但这些名字非常敏感,敏感到每次被提及的时候律师都要求法
庭内的没有阅读代码权限的人全部清场。为了减少清场次数,Barr将这个最重要的小程
序称为Task X。这个Task X有多重要呢?跟厨房里的洗涤盆一样重要。它负责非常多的
事情,包括计算节气门开启角度、速度监测和保持、定速巡航监测等等。Task X的不正
常运行被认为是暴冲事件的元凶。稍后会再继续讨论Task X。
还有一些别的匪夷所思的发现。比如丰田的软件包含了超过一万一千个全局变量。如果
你不知道什么是全局变量,那么只需要知道软件设计的一般原则是要尽量少使用全局变
量,因为有可能带来无法预测的结果。这里的“少”的意思是“尽量接近零”,绝对不
会是一万一千个。
不符合软件开发规范。
如同很多行业一样,汽车行业也有自己的规范。更具体一点,由于汽车的危险性质,汽
车控制系统被划分为“安全关键性系统(Safety Critical System)”——说白了就是
安全性非常重要,弄不好会死人的。为了达到这一特殊要求,汽车相关软件开发人员定
期举行会议讨论并发布编程规范,称为MISRA C。该规范的2004年版的感谢列表里还能
看到丰田员工的名字,至少让外界认为丰田确实也在遵循这些规范。
真的吗?根据源代码来看,答案是否定的。对此之前的NASA报告也有所提及,丰田辩称
他们遵循的不是行业规范,而是丰田内部编程规范。这一规范与行业规范的吻合程度达
到50%。但是Barr认为根据他的调查,两个规范之间吻合度小于10%,甚至有若干规范条
目相互冲突。后来发现丰田的代码甚至没有遵循丰田内部规范,当然比起别的问题这个
已经无关紧要了。
MISRA C拥有超过100条规范,NASA的调查只使用了到其中35条进行校对,发现超过7000
处违规代码。Barr使用全部条目,对照结果是丰田的程序拥有超过80000处违规代码。
这些数字说明了什么?根据统计,违规数量可以用于预测代码中暗藏的缺陷(Bug)数
量。在之前提到的汽车相关软件开发人员会议中,有人就这一主题发表过专题演讲,提
出每30处违规代码可能包含一个重大缺陷和十个轻微缺陷。讽刺的是这人是丰田员工。
特别需要指出MISRA C其中一个规则的内容是不得使用递归。
如果你不知道什么是递归,那么这里我稍微解释一下。递归是一种计算方法。但一般计
算方法要么是自己算,要么询问别的计算模块索要结果。而递归则是通过问一层层问自
己的方法完成计算。好处是代码简单,坏处是计算层数不固定。可能会2层就出结果了
,也可能会是10000层,在设计程序的时候无从得知。
软件计算需要消耗存储器。越繁琐、越长的计算自然需要占用越多的存储器。递归的问
题在于其嵌套层数无法预测,从而导致可能消耗的存储器容量无法控制。稍后会再讨论
对关键变量缺乏保护。
什么是变量?变量就是存在一段存储器的0和1的集合。这些变量既可以是一些函数的处
理结果,也可以是另一些函数的处理原材料。比方说前面提到有一条程序专门计算节气
门开合角度,比如说是20度,这个20就是一个变量,存在存储器的一个指定位置。另一
个程序专门负责开合节气门,它知道去那个指定位置读取这个20,然后把节气门开启20
什么是保护?嵌入式系统,或者任何系统,都会在一定条件下发生硬件或者软件错误。
客观上这是无法避免的。而且汽车作为一个时常在震动、发热、位移的系统,它的内部
环境不能说不恶劣,发生硬件错误的可能性甚至更高。什么样的硬件错误呢?别忘了变
量都是0和1的组合,这些0和1由存储器上的高低电平代表。由于某些不可抗原因,一个
电平从高变成低,或者反过来,那么这个变量就被更改了。这被称为“位反转(Bit
Flip)”。为了对抗这样的事情发生,需要对变量进行保护。保护的方法一般是镜像法
。简单来说就是在两个不同的地方写入同一个变量,读取的时候两边都读,比较是不是
一致。如果不一致,那么可以得知这个变量已经不可靠,需要进行容错处理。
丰田的程序总体上对其上万个变量进行了有效保护,但问题出在操作系统上。前面提到
丰田的软件本质上分为操作系统和Task。Task是由丰田自己开发,但是操作系统则是由
芯片供应商提供,固化在芯片里的。丰田在这里的过失是没有对供应商提供的代码进行
深度审核,拿到什么用什么。
另一个保护措施是错误校验码(Error Detective and Correction Codes,EDAC)。这
是一个硬件层面的数据保护措施。简而言之就是给内存中每一个字节(8比特)后面物
理地增加几比特校验码。这样万一变量出错了,可以通过校验码得知,甚至可以通过校
验码修复一些轻微错误。这个措施十分简单有效,但是在2005年款凯美瑞的系统中完全
没有使用,丰田却告诉NASA他们用了。而在2008年款凯美瑞中使用了3比特长的EDAC。
Barr认为是为了节省成本,否则应该使用5比特长。
还有值得一提的是,汽车相关的软件行业有那么几家操作系统供应商,早已形成了一套
成熟标准称为OSEK。各供应商开发的符合OSEK认证的操作系统至少都能达到一定的质量
。但丰田选用的操作系统却没有通过认证,让人不解。
现在我们知道丰田在编写软件的时候至少有三种缺陷。那么重点问题:丰田的这些软件
缺陷是否会导致车辆暴冲?根据Barr的调查,答案是有可能。暴冲的起因需要结合上述
三种缺陷来说明。
汽车正常运行需要倚靠若干程序(这里叫Task)的同时运作。Task有很多,CPU只有一
块,在任何时刻只能处理一个Task,怎么办呢?这需要操作系统的统筹规划,合理分配
CPU的任务,让每个Task都能按时执行。如果出现某种意外,让某个Task突然不执行了
,那么就称为这个Task“死亡”。Task死了,自然不能执行它的任务。根据Barr的测试
,在某些特定情况下,Task X的死亡可以导致节气门敞开——因为Task X的其中一个任
务就是根据司机的操作计算节气门开合角度,它死了也就没法重新计算这个角度,即使
司机把脚挪开加速踏板,节气门也无法关闭。此为暴冲的直接原因。更糟糕的是,节气
门的开合角度这个数值,被Task X算出来以后保存在一个变量中。这个特定的变量正好
没有被保护(缺陷3)。意味着万一Task X死亡并且停止计算,这个数值有可能因为不
可抗原因被改变,而程序无从得知。
那么Task X为何会死亡呢?一般是因为内存出错。这个出错可能是一个小小的位反转,
也可能是内存里的数值被别的程序错误覆盖。同一系统内同时运行了若干程序,这些程
序需要共享一块内存,内存内部必然要被划分成若干块。比如第一块给程序1,第二块
给程序2,等等。如果程序1因为某些原因(比如Bug)写到第二块内存上去,就会导致
程序2读取了错误的信息。这就是所谓的内存出错。丰田的系统里,正好有这么两块相
邻的内存块。第一块被称为“堆栈(Stack)”,这是所有Task存储它们运行状态的地
方,大小为4KB。与之相邻的地方储存了操作系统进行任务分配的记录。那么可以想象
,如果很多Task给堆栈里写入太多东西,超过4KB,那么就会错误地写入与之相邻的任
务分配表。这种错误被称为“堆栈溢出”。操作系统拿到了错误的任务分配表,就会错
误地分配任务,造成某些Task多执行几次,某些Task少执行几次,某些Task甚至就再也
不执行——死了!必须指出的是,程序死亡并不罕见,甚至可以认为是正常现象。稍后
解释处理方法。
那么堆栈为什么会溢出呢?显然是因为要写入的数据超过了堆栈的容量。在设计程序的
时候要计算最坏的情况并且允许冗余。即使作出了正确的设计,这种错误也相对常见,
所以NASA在他们的调查中重点排查堆栈溢出的可能性。于是NASA问丰田,丰田的回复是
最坏的情况下4KB堆栈只写入了41%的数据,换句话说发生溢出的可能性非常低。NASA直
接取信了这个数字并没有再深入调查。但Barr他们发现丰田的回答有严重低估,实际上
最坏的情况会达到94%,而且还不算递归。丰田在代码中使用了递归(缺陷2)。因而实
际数字有可能超过94%而且无法预计上限,因为递归计算的嵌套层数是无法预测的。所
以实际情况下堆栈溢出的可能性相当可观。一旦溢出,相邻的任务分配表不可避免就会
遭到破坏。此为暴冲的根本原因其中之一。之所以说“其中之一”,是因为堆栈溢出仅
仅是损坏任务分配表的其中一个原因,别的还有许多可能性并没有被Barr在法庭上深入
解释。而且任务分配表的损坏也仅仅是导致Task死亡的原因之一。
顺便提一句,2005年的凯美瑞的这部分供应商是电装,没有搭载堆栈实时监测功能——
溢出了也不知道。同年的卡罗拉却搭载了,因为供应商是通用。
到这里我小结一下,串链子。左边是原因,右边是后果。
堆栈溢出→(可能导致)→任务分配表被改写→(可能导致)→Task X死亡→(可能导
致)→节气门敞开→(导致)→汽车暴冲
必须指出的是,这条链子从最左边一直到Task X死亡,都还算是嵌入式系统的常见故障
。虽然程序代码写得不好也许导致更容易出错,客观上丰田并没有特别大的过错。只要
处理得当,这些故障都不会导致暴冲。
到此为止还只是前奏而已,接下来我们来看看丰田到底做错了什么。
【第二部分】丰田之罪
上面反复提到,嵌入式系统中内存出错或者程序死亡其实是一种正常现象——至少从
Barr的证词可以得出这个结论——现在连我们都知道了,嵌入式工程师肯定比我们更清
楚才对。确实,为了使系统正常运行不被错误干扰,一般的做法是设置若干层防护措施
(Failsafe),让运行中出现的错误无法轻易突破,得到妥善处理。丰田的工程师自然
也懂得这一点。很可惜,他们搞砸了。
上面那条链子应该修改成这样:
(防护措施0)→堆栈溢出→(防护措施1)→(可能导致)→任务分配表被改写→(防
护措施2)→(可能导致)→Task X死亡→(防护措施3)→(可能导致)→节气门敞开
→(防护措施4)→(导致)→汽车暴冲
可以看到,防护措施不可谓不多。只要处理得当,这链条应该是走不通的。现在让我们
从左到右看一个小小的内存错误是如何一层层突破防护最终导致汽车暴冲的。
首先防护措施0。这个其实上面提到了,因为设计缺陷低估了最大占用的存储容量,并
且不符合规范地使用了递归,最终可能导致堆栈溢出。
然后到防护措施1。上面也提到了,任务分配表紧邻堆栈。作为外行我都觉得这是个十
分危险的设计——既然堆栈这么容易溢出,好歹应该将任务分配表放远一点啊。当然我
是外行,可能实际上比想象中复杂很多。这段Barr的证词中并未特别提到,属于我的个
防护措施2。从这里开始丰田的错误越发严重。任务表被改写导致某些Task运行异常,
在软件层应该有若干检测措施,比方说用特殊的监视Task来监视别的Task是否正常。但
丰田是怎么做的呢?还记得上面的“厨房洗涤盆”Task X吗?它是如此复杂(缺陷1)
,除了控制汽车运行的任务之外竟然还兼任大部分的监视任务,比如生成DTC。
DTC(diagnostic trouble codes),是汽车电脑系统会根据情况生成的错误代码。有
的车主可能会遇到汽车某报警灯常亮,修车师傅拿个仪器插在行车电脑上得出一个代码
,再查表就知道哪个元件坏了——这就是DTC。除了用于修车,DTC还被用于检测行车电
脑和各传感器的异常状态。
可以想象,这个既是运动员又是裁判的Task X一旦死亡,软件层的检测措施大部分就失
防护措施3。在这里丰田的错误开始到达顶峰。即使设置正确无误,上面提到的监视
Task也只不过是另一个Task而已,与它的监视对象算是平级——监视Task自己同样有可
能出现故障。嵌入式系统的一般做法是在所有程序之上再设置一道屏障,被称为“看门
狗(Watchdog)”。所谓看门狗,是一个优先级很高的倒计时程序。别的程序需要在运
行的时候特意去重置一下这个计时器让它重新开始倒计时,这个动作被称为“喂狗”。
如果因为程序出问题太长时间不喂狗,倒计时完成,看门狗知道什么地方卡住了,马上
采取措施,比如重启整个系统。重启系统听起来似乎很严重,实际上却是一件相当普通
的事情。嵌入式系统的重启非常快,时速100公里的汽车中动力系统可以在半米之内完
成重启——车上的人根本觉察不到。
通过阅读代码和拟真实验,Barr惊讶地发现上述嵌入式系统的常识性做法竟然在丰田软
件系统内不存在!丰田的软件确实有一只看门狗,但它竟然不是用于监视Task异常,而
是用于防止CPU过载。首先这个做法不能说后无来者至少算是前无古人。还记得上面提
到的800页13章的报告吗?目瞪口呆的Barr将丰田看门狗的分析结果写入了报告的第一
章,因为他实在太震惊。其次,丰田看门狗的防止CPU过载功能也相当蹩脚,在拟真测
试发现即使它正常工作,还是会允许CPU过载时间长达1.5秒——时速100公里的车能跑
40米以上。CPU一旦过载,就会导致所有的Task进入一种“假死”状态,无法处理信息
,这时司机无法控制汽车动力,十分危险
另外,丰田的工程师还犯了一个嵌入式课堂上被反复提到的经典错误:使用硬件时钟中
断喂狗。硬件中断拥有非常高的优先级,即使Task卡住(比如出现死循环)也不能阻止
硬件中断——可想而知这样一来看门狗就等于完全白瞎了。
这里也提一句,同年的普锐斯却令人意外地搭载了一只运作正常的看门狗,反而让人摸
不着头脑。
还没完。这一层防护是嵌入式系统的关键阵地。前面都是电子系统,后面马上进入机械
运作,足以造成灾难了。所以仅仅拥有软件级别的防护还不足够,丰田的做法是在主
CPU之外单独设置了一块监视芯片,从硬件级别对系统的运作进行监视。监视芯片有两
个任务。第一,它运行一种叫做系统卫士(System Guard)的程序,原理上来说是专门
用于防止暴冲。主CPU和监视芯片上都会运行系统卫士,可是研究发现Task X一旦死亡
,这些系统卫士统统都不起作用了。第二,它运行一个被称为“刹车回声检查(Brake
Echo Check)”的程序。这个程序从代码上来看似乎可以检测出Task X的死亡,并且采
取相应措施:关闭节气门。听起来像是好消息,但是同样有问题:首先这个程序不太可
靠,即使正常运行,理论上也有失效的可能。最关键的是该程序不会自动运行,需要司
机先对刹车踏板有“动作”才会触发。注意这里我特意没用“踩刹车”这个词,因为根
据分析“触发动作”十分令人困惑。它分两种情况:如果Task X死亡的那一刻司机的脚
不在刹车踏板上,那么触发动作是踩刹车。还算可以理解。另一种情况,如果Task X死
亡那一刻司机的脚踩在刹车踏板上,那么触发动作是完全释放刹车踏板。没错,察觉车
子在不正常加速的司机需要停止踩刹车才能让控制系统关闭节气门!这种违背人类认知
的行为应该不是丰田工程师特意设计的。如果是,他们到底在想什么啊?
到此为止,上面提到的都算是“战术层面”的错误,都是“小错”。在讲解这块监视芯
片的时候,可以发现丰田犯下最严重的“战略层面”错误——基础设计。Barr认为,如
果基础设计正确,上述那些小错都完全不会导致汽车暴冲——不管代码写得多业余,不
管内存错误多严重,不管Task死得多频繁,统统不会致命。让我们回到2002年以前,没
有电子油门的时候。那时候的拉线油门是由油门踏板机械连接的。当驾驶员的右脚踩下
刹车,他的右脚必然不在油门踏板上,节气门自然而然地被关闭。这个动作如此自然,
甚至算不上安全措施,仅仅因为每人只有一只右脚,不可能同时踩油门和刹车。当丰田
设计电子油门的时候,只要稍微有点常识,都应该从设计阶段就将这一“自然而然”发
生的动作考虑进去。但是很显然,他们没这么做。监视芯片上运行的代码是用汇编语言
(一种更加接近机器执行代码,远离人类语言,更加难懂的编程语言)编写的,运行层
次比主CPU的C语言更低。Barr认为如果设计得当,现有的监视芯片完全有能力胜任上述
功能,需要的仅仅是几百行代码,别的什么都不用更改——不会提高任何生产成本。很
遗憾,他们没有做到。
防护措施4。现在已经脱离电子系统,节气门已经敞开,发动机全速运转,需要使用机
械运作来组织机械运作了。如何让向前冲的车子停下来?不开车的人都知道,刹车!现
代汽车都装备了刹车助力,助力来自于发动机运转的时候产生的负压。我们知道发动机
需要吸入空气,吸入体积等于排气量乘以转速。节气门又是用来阻挡空气的,那么节气
门关闭而发动机转速相对高的时候(比如高速丢油门),发动机的实际空气吸入量比它
能吸入的体积要少,那么从节气门到气缸进气口之间会形成明显低气压(所谓负压,比
大气压力小)。刹车助力就是利用了这个负压推动气鼓产生更大的推力带动刹车片抓紧
刹车盘。但是如果节气门敞开让空气随便进来,低气压就不存在了,这时刹车助力大大
减弱,刹车效率也大大降低。这就是为什么暴冲事件当事人都说全油门的时候根本刹不
住的重要原因。这个现象称为“真空损失(Vacuum Loss)”,存在于所有自然吸气的
汽油发动机汽车(柴油和增压发动机没影响),不算丰田的错。但丰田迟迟不搭载刹车
优先系统(Brake Override System)允许刹车的同时敞开节气门,毫无疑问是这个现
象的帮凶。
所谓刹车优先系统,指的是保证同时踩下刹车油门两个踏板的时候无条件关闭节气门的
功能。这么做很显然主要是为了降低发动机输出,同时也保证刹车助力。丰田在2010年
的凯美瑞上终于搭载了刹车优先系统,但是别高兴得太早。根据Barr的调查,丰田竟然
将如此重要的修改“理所当然”地写入了他们的“厨房洗涤盆”——Task X。我只能“
哑然失笑,扼腕叹息”。
好了,到此为止都还是Barr的一面之词,而且大部分都是在那间守卫森严的房间内进行
拟真测试得出的“理论结果”。那么实车测试情况如何呢?丰田对Barr的证词如何反驳
先说说实车测试。为了证明理论,他们把2008年和2005年的凯美瑞放在马力机上,固定
车身架起前轮模拟车辆运行情况。他们的做法是首先让车子运行在时速68英里(110公
里),启动巡航,脚离开油门踏板。然后暂停巡航,速度开始下降。下降到一定程度恢
复巡航,速度开始上升。在到达68英里的设定时速以前,他们用一台连接行车电脑的笔
记本“注入”错误。所谓注入错误,就是人为地翻转一个特定字节——将0改成1,或者
反过来——模拟内存损坏。结果完全符合理论,时速超过68英里也不停止加速,直至时
速90英里(145公里),测试人员踩下刹车。大约1秒以后节气门被关闭,Barr认为这是
上述“刹车回声检查”的功劳。
实车测试证明了Barr的理论,却并不是全无破绽。丰田辩护律师就两点提出质疑:
实车测试使用人工注入错误的方法,并不能证明现实中这种错误就一定会发生。
对此Barr的回答是测试的局限性。因为测试时间、样本有限,而待测试的样本空间无穷
大。如果要等待那个特定的错误自然出现,可能需要成百万上亿小时的不间断测试,显
然是不现实的。更何况从科学上而言,没有办法对这个错误证伪——就好比无法证明宇
宙里没有外星人,最多只能证明火星上找不到而已。但是这个测试足以证明一个小小的
位翻转确实可以突破重重障碍最终导致暴冲,足以证明丰田的软件存在不能容忍的隐患。
Bookout女士(本案原告)声称,在她驾驶汽车离开高速的时候发现不受控加速,她拼
命反复踩下刹车并且拉起手刹,现场留下了刹车痕迹。但并没有迹象表明发动机动力中
断——换言之“刹车回声检测”没起作用。暗指Barr的理论站不住。
对此Barr的回答是首先尽管在实车测试中每次都生效,但代码分析表明“刹车回声检查
”这一功能在理论上靠不住。其次这一功能的另外一个触发动作是要让脚完完全全离开
刹车踏板。试想车子正在不受控地往前冲,任何人都会不由自主地踩刹车,让人完全不
踩刹车踏板根本就是违背认知的。Bookout女士即使如同她所称反复踩刹车,很可能只
是一直将脚放在踏板上往复运动,从未完全挪开。Barr还引用一位丰田自己的软件专家
的证词。该专家承认,如果发生暴冲的时刻脚正好接触到刹车踏板,并且之后一直没挪
开,那么汽车的暴冲距离“取决于还剩多少汽油”。
最后顺带说一下那份800页,13章的详细报告完成后,Barr将其提交给了丰田的软件部
门,等待他们的反驳。最终结果是“非常少(Very little)”,13章中的11章,包括
堆栈溢出的部分、代码混乱的部分、违反开发规范的部分、Task X过于臃肿甚至兼任节
气门控制和防护措施的部分、看门狗形同虚设的部分、无EDAC的部分、重要变量缺乏保
护的部分、使用了非标准化操作系统的部分,全部没受到任何形式的反驳。
【第三部分】后记
写到这里,谈谈人们比较关心的几点。当然还是外行眼光。
NASA / NHTSA怎么没发现这些问题?
NHTSA本身不具备检验电子系统的能力,于是委托NASA。NASA检验的是整个电控系统,
包括电控传动部分,范围比较宽,只有很少一部分资源被用于检验软件系统,也没有投
入足够的人力进行逐行代码审阅。更何况在很多关键问题,比如之前提到的EDAC的使用
、堆栈的设计,NASA都直接采信丰田的回复,最终被证明不正确。甚至NASA从来都没拿
到过监视芯片的源代码,丰田的说法是“他们没说要啊”。NASA报告虽然没能找到软件
系统导致暴冲的确切原因,但没有否定其可能性。与之相比Barr的团队全部都是嵌入式
系统专家,投入上千小时,深入程度甚至超过丰田自身对这个系统的理解(比如丰田没
看过供应商的OS代码,Barr看了)。
能否100%确定本案就是由软件错误造成的?
不能。并没有直接证据。诉讼团认为,软件错误造成该事故的可能性比软件错误没造成
该事故的可能性大(原文:more likely than not)。
这里再提一句,2005年款的凯美瑞没有搭载行车数据记录器(俗称“黑盒子”),后来
的车款渐渐开始搭载。但是Barr发现这个记录功能并不可靠,完全有可能记录错误信息
。比如司机踩刹车了可能会被记录成没踩。
本案的意义
之前虽然丰田赔了不少钱,但是从未在涉及人身伤害的案件上承责。所以本案意义在于
开先例。美国的法律又特别注重先例,今后丰田的法务部门要头疼了。
本案提到的有缺陷软件涉及了哪些车型?
全部是美国的车型。Barr的调查重点是2005年款凯美瑞,另外审阅过的包括雷克萨斯ES
、Tacoma、卡罗拉和普锐斯等等,生产年份大致在2002年(电子油门元年)与2010年之
间。其中凯美瑞、雷克萨斯ES和Tacoma使用的软件系统大致接近(原文:
Substantially similar)。另外根据统计,汽车暴冲投诉中与2004年款以后的凯美瑞
有关的案件数量激增400%。
最后的最后,放上本案关键证人Michael Barr的独家访谈:
我:这么看来似乎手动档汽车更安全,你怎么认为?
Barr:很多专家都这么认为,离合器至少可以物理断开动力系统。但是我翻阅卷宗,发
现其中有个案例是受害者开手动档凯美瑞载着家人,突然巡航系统失灵,无法取消。他
踩下离合,同时试图躲避前方慢速车辆结果失控冲出路面造成单车事故。幸运的是没死
我:现在我们都知道丰田的软件很糟糕。可是你对整个汽车行业的软件水平有什么看法
?丰田的软件在同行内属于什么水平?
Barr:我没有接触过丰田以外的软件代码。但是请注意,这次发现的最严重问题是丰田
在设计源头上没有考虑安全,软件质量反倒没有那么重要。只要一个安全为先的设计,
比如刹车和关闭节气门的可靠互动、防止节气门开启降低刹车效率的机制等等,不管软
件有多差劲也不会造成致命结果。只是我真不知道软件还能怎么差。
我:终极问题,你开什么车?
Barr:我不开丰田。接触该案以来我没买过新车。老实说我现在非常害怕买新车。我倒
是问过一个与车企斗争了三十多年的职业状棍同样的问题,他开宝马。
微信扫一扫分享
&浏览:14764&&回帖:301 &&
泡网分: 0.144
注册: 2016年07月
丰田除了品控和发动机,其他的全是渣渣。86是斯巴鲁技术
本帖由安卓客户端发布
泡网分: 53.007
帖子: 15424
注册: 2003年09月
zda111 发表于
又看了一遍。
觉得主要还是设计上的问题,没有安全第一的理念,以及系统设计的过于繁杂,增加了bug的出现机会。
28万行C语言代码,估计要10个人的team开发3年吧。丰田编译水平比大众差远了,VW工程师随便编的智能代码,就能让柴油变身为清洁的未来能源。
泡网分: 30.61
帖子: 2998
注册: 2004年11月
又看了一遍。
觉得主要还是设计上的问题,没有安全第一的理念,以及系统设计的过于繁杂,增加了bug的出现机会。
28万行C语言代码,估计要10个人的team开发3年吧。
泡网分: 1.23
帖子: 3674
注册: 2006年12月
又翻出这个,估计丰田再过几年就可以完成重新开发了,耐心些呗
泡网分: 4.584
帖子: 9343
注册: 2013年11月
airstream 发表于
你还没少回呢!我是Alzheimer's
泡网分: 52.82
帖子: 18557
注册: 2008年03月
V65 发表于
LZ的ID换了?LZ的这个ID不熟悉,不记得在LZ的帖子里回过,进来发现是老帖子,我还回过...???你还没少回呢!
泡网分: 1.281
帖子: 1025
注册: 2013年05月
所以关键是宝马么
本帖由安卓客户端发布
泡网分: 2.927
帖子: 3822
注册: 2005年12月
哪个弱智又挖坟?
本帖由安卓客户端发布
泡网分: 8.497
帖子: 8459
注册: 2000年10月
V65 发表于
看贴不仔细,是说有1万多个全局变量,不是1万行.
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,aa1,a1a,ala,aal,aIa,aaI;
才一行...狠的:
int l,ll,l1,l1l, ...
read as ell, ell-ell, ell-one, ell-one-ell,
泡网分: 8.497
帖子: 8459
注册: 2000年10月
zda111 发表于
日企很多机载软件都是外包给中国的
代码有bug很正常,毕竟开发人员素质参差不齐,关键看测试和质量控制的如何A well defined and proofed design is of utmost importance, especially for those systems handling asynchronous events.
泡网分: 4.584
帖子: 9343
注册: 2013年11月
filter 发表于
基本是假的吧。
28万行代码有1万行全局变量,有很大的难度啊!我不信丰田的技术有这么好!看贴不仔细,是说有1万多个全局变量,不是1万行.
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,aa1,a1a,ala,aal,aIa,aaI;
泡网分: 8.497
帖子: 8459
注册: 2000年10月
基本是假的吧。
28万行代码有1万行全局变量,有很大的难度啊!我不信丰田的技术有这么好!
泡网分: 4.584
帖子: 9343
注册: 2013年11月
LZ的ID换了?LZ的这个ID不熟悉,不记得在LZ的帖子里回过,进来发现是老帖子,我还回过...???
泡网分: 52.82
帖子: 18557
注册: 2008年03月
最近刚好有人跟我提到这个报告,又重新看了一遍,楼也全爬了一遍,感觉除了几个h开头的跳梁小丑东拉西扯外,几位专家的专业讨论还是很充分的。
我感觉这个事情跟空难中讲的事故链类似,它不是一个问题引起的,而是多个错误接连发生而没有被制止而导致的。
每个环节的错误都不是致命的,都是有办法可以制止的。但是由于丰田代码BUG太多,使得这种暴冲的可能性没有被完全扼杀掉。
从概率上来说,这跟空难一样是小概率事件,所以几百几千万辆车跑了这么多年只死了37个人。
楼上greatsmoky泡菜提到他的凯美瑞也遇到过暴冲这个问题,好在没有造成严重后果。
这说明问题是客观存在的,不过因为这种软件问题是随机产生的,你很难重现它。
2011年NHTSA和NASA没有找到这个问题的直接证据,2013年楼主贴的这个Barr的团队通过人为注入一个错误证明了存在这种“暴冲是软件BUG导致的”可能性。
泡网分: 30.61
帖子: 2998
注册: 2004年11月
日企很多机载软件都是外包给中国的
代码有bug很正常,毕竟开发人员素质参差不齐,关键看测试和质量控制的如何
泡网分: 5.427
帖子: 3011
注册: 2011年04月
丰田刹车门代码,无聊时候看看。
泡网分: 13.197
帖子: 4142
注册: 2008年10月
非资深泡菜 发表于
太长了,能概述吗宝马最最好
泡网分: 2.718
帖子: 2730
注册: 2015年09月
非资深泡菜 发表于
太长了,能概述吗就是丰田汽车公司的嵌入式系统程序员从领导到干活的都是猪头,编写程序越弄越复杂把自己绕晕了。
泡网分: 0.323
注册: 2016年01月
太长了,能概述吗
本帖由安卓客户端发布
泡网分: 0.056
注册: 2008年11月
泡网分: 36.024
帖子: 2560
注册: 2002年02月
蓝精灵 发表于
Pair programming在agile里现在很流行啊。我们有时也会试,一般是一个人新用一个库或者模式,而另一个人已经熟练掌握的情况下用,减少前者的learning curve也更好的保证质量。不过所有的程序都这样写代价太高了一些。当然code review肯定还是要有的。这个是十来年前的事情,那个时候我都没听说过agile,我们这个行当到现在也没几家用agile,码农吗
泡网分: 36.024
帖子: 2560
注册: 2002年02月
V65 发表于
我当时看完这个文章去查了下,网上很多关于写软件/测试的文章和书说的是:0.004 defects per 1000 line of code, 这个大约是1/250000,比这个作者说的1/400KLOC要好些:
我想应该差的不多,但我觉得还是多了点,我就又去查, 看到 ...谢谢兔老的资料,让我抽空看看,这个是不是说found bug and defect?而不是一楼里面说潜在的bug,这样两者可能会差几个数量级
泡网分: 50.134
精华: 5帖子: 8260
注册: 2000年12月
freeflight 发表于
我也不相信三大的软件能比丰田质量高,但是三大这样政府控股的本土企业受保护啊,啥时候把他们的code拉出来评评就有意思了。另外三大有强...Pair programming在agile里现在很流行啊。我们有时也会试,一般是一个人新用一个库或者模式,而另一个人已经熟练掌握的情况下用,减少前者的learning curve也更好的保证质量。不过所有的程序都这样写代价太高了一些。当然code review肯定还是要有的。
iPhone5/5s iOS8.0.2 客户端发布
泡网分: 4.584
帖子: 9343
注册: 2013年11月
freeflight 发表于
程序复杂到一定程度,bug是无法避免的。我对这个文章的可信性非常的怀疑,诸老想想 averaging about one bug per 400KLOC s是什么概念。。。四十万行程序才一个bug,可能吗?除非每行都是 i++
这年头网上的文章良莠不齐,顺便看看笑笑就算了我当时看完这个文章去查了下,网上很多关于写软件/测试的文章和书说的是:0.004 defects per 1000 line of code, 这个大约是1/250000,比这个作者说的1/400KLOC要好些:
我想应该差的不多,但我觉得还是多了点,我就又去查, 看到这个case study, 所以我4/1号的帖子用的是这个PDF里的数字:
泡网分: 0.656
注册: 2014年02月
像是专业人士写的,但丰田不会这么低水平吧?
本帖由安卓客户端编辑于: 16:47:33
泡网分: 36.024
帖子: 2560
注册: 2002年02月
蓝精灵 发表于
不是说丰田没有问题,但这个事情真是要结合当时的背景看。要说三大写的软件比丰田质量高我还真不敢信。GM前不久ignition switch的故障那么严重,十几年的时间都隐瞒不报,自己都承认死了十几个人,召回的车辆数目比丰田多几倍,最后也没闹出丰田那么大的动静。要是换成日本车早就被废掉了。我也不相信三大的软件能比丰田质量高,但是三大这样政府控股的本土企业受保护啊,啥时候把他们的code拉出来评评就有意思了。另外三大有强大的工会,责任心实在成问题。工人午休时间喝酒吸毒,下午照样上生产线组装车。。。这样的车能啥样你懂得。最神奇的是被电视曝光以后,开除几天然后迫于工会的压力,雇回来继续上班
跟NEC合作过,那个项目的每一行程序至少要经过两个人,一个写,另一个座一边review和讨论,然后还有高一个级别的code review,大量的测试。你可以说他们的程序结构不新潮不fancy,但是QA的质量绝对一流,用起来放心啊
本帖最后由 freeflight 于
16:06 编辑
泡网分: 36.024
帖子: 2560
注册: 2002年02月
V65 发表于
这里有篇文章说的挺逗.说世界上最贵的一份软件是nasa的宇宙飞船的航空电子软件,大概是每行1000刀,但这软件也是最棒的,虫子最少的,大概是每1万行有一个虫子.(一千行有2个虫子就是顶尖软件标准了).
而按一个非常严格的航空界电子软件开发标准写商业软件的话,也不过是每行80刀就可以达到世界级的水平了.
丰田的这个软件,不算软件开发的费用,只从被罚款的钱上算,已经达到了每行1200刀的标准.
程序复杂到一定程度,bug是无法避免的。我对这个文章的可信性非常的怀疑,诸老想想 averaging about one bug per 400KLOC s是什么概念。。。四十万行程序才一个bug,可能吗?除非每行都是 i++
这年头网上的文章良莠不齐,顺便看看笑笑就算了
泡网分: 40.929
精华: 1帖子: 2383
注册: 2000年04月
Appalachian 发表于
当然是重大发现,无论出不出意外都要重视。我只是认为具体到某一案件需要更有力的证据。
...丰田曾经公开声明:不存在软件同暴冲有关联的任何可能性。而Barr的证词表明,它不仅存在而且很大。这个声明给丰田的脖子套上了绳索。你看有些软件公司早有免责声明在先:无论软件造成什么损失一概不承担责任。
另一个问题是丰田在Camry 上错误地运用了看门狗,但在Prius 上正确使用了。这表明丰田具有正确运用软件保护技术的知识而没有运用。
本帖由 iPhone 4S 客户端发布
泡网分: 0.162
帖子: 1329
注册: 2014年12月
日车好,写个软件全局变量就1万多,厚道。秒杀大众。
泡网分: 14.933
帖子: 14587
注册: 2008年12月
有些泡菜显然偏离了主题。。。
大家讨论的是这个程序如何,而不是说丰田车如何。所以没必要激动。。。
既然是庭外和解,其实既不能说明它有问题也没有说明它没问题,只是说明事情解决了。。。
当时法庭的判定对丰田不利的情况下,它及时地选择了和解,从商业角度上做得不错。
民事官司本来就不一定要分清对错的,原告罢休官司就结束了。。。
上万的全局变量是有点吓人。
但是,在80-90年代,全局变量确实是普遍使用的。在汇编语言和C的时代,全局变量不可或缺。
那时候,软件工程刚刚兴起,go to语句还在使用。。。尤其在嵌入式领域。。。
现在分析十几年前的软件,自然会发现它不合规范、简洁、简单。。。等等标准。但是当时就是如此。。。
然后的十多年内,有很多人对此进行维护、改进和扩展,因为不能确切掌握前面变量的含义和被修改的情况,于是也不断地增加全局变量,最终造成了这个结果。
相信后来一定会全面更新了软件 -- 因为硬件更新,不换也得换。
&版权所有:&&&&

我要回帖

更多关于 python 源代码保护 的文章

 

随机推荐