<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>凋零的羽 &#187; Technology</title>
	<atom:link href="http://www.halfroom.com/categories/technology/feed" rel="self" type="application/rss+xml" />
	<link>http://www.halfroom.com</link>
	<description>乘着风游荡在蓝天边</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:54:44 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SSL/TLS协议简介</title>
		<link>http://www.halfroom.com/ssl-andtls.html</link>
		<comments>http://www.halfroom.com/ssl-andtls.html#comments</comments>
		<pubDate>Mon, 17 Jan 2011 07:14:56 +0000</pubDate>
		<dc:creator>灰灰</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[加密技术]]></category>

		<guid isPermaLink="false">http://www.halfroom.com/?p=1244</guid>
		<description><![CDATA[<p>Posted in <a href="http://www.halfroom.com/categories/technology" title="Technology">Technology</a></p>SSL/TLS协议简介 密码技术 要了解SSL协议，首先要了解：加密算法、消息摘要算法（又称为哈希算法Hash），数字签名等概念。这些技术每个都可以写出一整本的书，它们结合在一起，提供了保密性、完整性和身份验证的功能。 加密算法 设想：ALICE想发消息给她的银行要汇出一笔款。ALICE希望这些消息是保密的，因为这里面包括她的帐户资料和汇款金额。一种办法是使用加密算法，这种技术将她要传递的消息变成经过加密的密文，直接银行解密才可以被读取。 如果采用这种形式，消息只能被一个密钥所加密。没有这个密钥，消息就是无用的。一个良好的加密算法，可以使入侵者面临无法克服困难来解密原文。 有两种加密算法系列：传统加密算法（对称加密）和公钥加密算法（非对称加密） 传统加密算法 也称为对称加密，需要发送者和接收者共享一个密钥：同时用于加密和解密的信息。 只要密钥是保密的，除了收件人和发件人外没有人可以阅读该消息。如果Alice和银行知道这个密钥，那么他们可以给对方发送的经过此密钥加密的消息。这种算法的主要任务在于发送者和接收者如何共享一个密钥，同时确保没有第三方知道这个密钥，如果多人之间传递消息，如何保证这么多密钥的安全，就是一个棘手的问题。 公钥加密算法 也被称为非对称加密技术，通过使用2个密钥（其中一个可以解密另外一个加密的消息），解决了加密密钥交换的问题。 如果用其中的一个密钥用于加密信息，必须使用另外一个密钥来解密。这样就有可能获得简单地发布一个密钥（公钥），并使用未发布的密钥（私钥）来接受经过公钥加密的消息。 任何人都可以使用公共密钥加密消息，但只有私钥拥有者将能够读取它。这样，ALICE可以在发送需要保密的汇款消息给银行的时候，可以使用银行的密钥对中的公钥来对这个消息进行加密，而只有银行可以使用他们自己保管的私钥来进行解密。 消息摘要算法 虽然ALICE可以加密她的消息，但仍然有一个问题，就是有人可能会修改她发给银行的消息，并将ALICE的钱转移到自己的帐户上。为了保证ALICE消息在传递过程中没有被人篡改，可以让她创建一个消息的摘要和加密的消息一起寄到银行，银行收到消息后，将消息和消息的摘要做一个比较，如果消息内容和摘要匹配，则就可以证明消息传递过程中，没有别人篡改。 像这样的摘要被称为消息摘要， 单向函数或哈希函数 。消息摘要用于创建一个简短的固定长度，或可变长度的消息。消息摘要算法被设计成为每个消息产生一条独立的信息摘要。消息摘要算法的目的，就是让人无法为两条不同的消息找到相同的消息摘要，从而消除了使用一条摘要相同的消息替换另外一条消息的可能性。 另一个爱丽丝面临的挑战是找到一种方法，即使安全地将消息摘要发送到银行;如果消息摘要发送过程不安全，银行将无法判断消息是否就是来自ALICE。只有在消息摘要能安全地发送，才能够使消息的完整性被确定。 一个安全发送消息摘要的方式是使用数字签名。 数字签名 当Alice将消息发送给银行，银行需要确保消息真正地是从她这里发出的，以确保入侵者不能使用她的帐户进行交易。 签名就是由ALICE为实现这一目的而创建的一个专门消息。 数字签名主要使用私钥来加密消息摘要和其他信息，譬如一个序列号,虽然任何人都可以使用公钥解密数字签名，只有发送方知道私钥。这意味着，只有发件人可以签署了该消息。包含了信息摘要的签名表示这个签名只对这个消息有效，而且它确保了消息的完整性，即这个消息的发送过程中没人可以改变摘要并另外对它做签名。 为了防止入侵者拦截，并在以后再次使用这个签名，签名包含一个唯一的序列号。 这样可以保证ALICE无法否认她曾经发送过这条消息，因为只有她可以签名这条消息（不可抵赖性）。 证书 虽然ALICE给银行发出一条经过她个人私钥签名的消息，并且可以确保她发送的消息是真实可靠的，但她依然要确保她的确是和银行在通信。这意味着她必须确保她使用的公钥是银行密钥对中的公钥，而不是入侵者的。同样道理，银行业也需要核实用于签名该消息的私钥是属于ALICE的。如何使银行和ALICE能否核实对方的身份呢？ 如果每个人的证书都由一个大家都信任的机构签名，那么每个人都可以验证其他有该证书的人的身份。这种被大家都信任的机构，称为认证中心（CA)，他们负责认证证书。 证书的内容 证书内容包括：公钥和真实身份识别信息，包括个人，服务器或其他实体。如表1所示，主题信息包括身份识别信息（DN）和公钥。它还包括认证和签发的CA签发这个证书的有效期，还可能有一些其他的信息（或者成为扩展信息），一般由CA自行定义使用的管理信息，譬如序列号等。 表一：证书信息 主题（证书所有人） 识别名，公钥 签发者 识别名，签名 有效期 不早于，不晚于 管理信息 &#8230; <a href="http://www.halfroom.com/ssl-andtls.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>SSL/TLS协议简介</strong></p>
<p>密码技术</p>
<p>要了解SSL协议，首先要了解：加密算法、消息摘要算法（又称为哈希算法Hash），数字签名等概念。这些技术每个都可以写出一整本的书，它们结合在一起，提供了保密性、完整性和身份验证的功能。</p>
<p><strong>加密算法</strong></p>
<p>设想：ALICE想发消息给她的银行要汇出一笔款。ALICE希望这些消息是保密的，因为这里面包括她的帐户资料和汇款金额。一种办法是使用加密算法，这种技术将她要传递的消息变成经过加密的密文，直接银行解密才可以被读取。  如果采用这种形式，消息只能被一个密钥所加密。没有这个密钥，消息就是无用的。一个良好的加密算法，可以使入侵者面临无法克服困难来解密原文。</p>
<p>有两种加密算法系列：传统加密算法（对称加密）和公钥加密算法（非对称加密）</p>
<p><strong>传统加密算法</strong></p>
<p>也称为对称加密，需要发送者和接收者共享一个密钥：同时用于加密和解密的信息。  只要密钥是保密的，除了收件人和发件人外没有人可以阅读该消息。如果Alice和银行知道这个密钥，那么他们可以给对方发送的经过此密钥加密的消息。这种算法的主要任务在于发送者和接收者如何共享一个密钥，同时确保没有第三方知道这个密钥，如果多人之间传递消息，如何保证这么多密钥的安全，就是一个棘手的问题。</p>
<p><strong>公钥加密算法</strong></p>
<p>也被称为非对称加密技术，通过使用2个密钥（其中一个可以解密另外一个加密的消息），解决了加密密钥交换的问题。  如果用其中的一个密钥用于加密信息，必须使用另外一个密钥来解密。这样就有可能获得简单地发布一个密钥（公钥），并使用未发布的密钥（私钥）来接受经过公钥加密的消息。</p>
<p>任何人都可以使用公共密钥加密消息，但只有私钥拥有者将能够读取它。这样，ALICE可以在发送需要保密的汇款消息给银行的时候，可以使用银行的密钥对中的公钥来对这个消息进行加密，而只有银行可以使用他们自己保管的私钥来进行解密。</p>
<p><strong>消息摘要算法</strong></p>
<p>虽然ALICE可以加密她的消息，但仍然有一个问题，就是有人可能会修改她发给银行的消息，并将ALICE的钱转移到自己的帐户上。为了保证ALICE消息在传递过程中没有被人篡改，可以让她创建一个消息的摘要和加密的消息一起寄到银行，银行收到消息后，将消息和消息的摘要做一个比较，如果消息内容和摘要匹配，则就可以证明消息传递过程中，没有别人篡改。</p>
<p>像这样的摘要被称为消息摘要， 单向函数或哈希函数  。消息摘要用于创建一个简短的固定长度，或可变长度的消息。消息摘要算法被设计成为每个消息产生一条独立的信息摘要。消息摘要算法的目的，就是让人无法为两条不同的消息找到相同的消息摘要，从而消除了使用一条摘要相同的消息替换另外一条消息的可能性。</p>
<p>另一个爱丽丝面临的挑战是找到一种方法，即使安全地将消息摘要发送到银行;如果消息摘要发送过程不安全，银行将无法判断消息是否就是来自ALICE。只有在消息摘要能安全地发送，才能够使消息的完整性被确定。</p>
<p>一个安全发送消息摘要的方式是使用数字签名。</p>
<p><strong>数字签名</strong></p>
<p>当Alice将消息发送给银行，银行需要确保消息真正地是从她这里发出的，以确保入侵者不能使用她的帐户进行交易。  签名就是由ALICE为实现这一目的而创建的一个专门消息。</p>
<p>数字签名主要使用私钥来加密消息摘要和其他信息，譬如一个序列号,虽然任何人都可以使用公钥解密数字签名，只有发送方知道私钥。这意味着，只有发件人可以签署了该消息。包含了信息摘要的签名表示这个签名只对这个消息有效，而且它确保了消息的完整性，即这个消息的发送过程中没人可以改变摘要并另外对它做签名。</p>
<p>为了防止入侵者拦截，并在以后再次使用这个签名，签名包含一个唯一的序列号。  这样可以保证ALICE无法否认她曾经发送过这条消息，因为只有她可以签名这条消息（不可抵赖性）。</p>
<table cellspacing="0" cellpadding="0" width="360">
<tbody>
<tr>
<td width="360" height="1" background="/images/dotted_bg.gif"></td>
</tr>
</tbody>
</table>
<p><strong>证书</strong></p>
<p>虽然ALICE给银行发出一条经过她个人私钥签名的消息，并且可以确保她发送的消息是真实可靠的，但她依然要确保她的确是和银行在通信。这意味着她必须确保她使用的公钥是银行密钥对中的公钥，而不是入侵者的。同样道理，银行业也需要核实用于签名该消息的私钥是属于ALICE的。如何使银行和ALICE能否核实对方的身份呢？</p>
<p>如果每个人的证书都由一个大家都信任的机构签名，那么每个人都可以验证其他有该证书的人的身份。这种被大家都信任的机构，称为认证中心（CA)，他们负责认证证书。</p>
<p><strong>证书的内容</strong></p>
<p>证书内容包括：公钥和真实身份识别信息，包括个人，服务器或其他实体。如表1所示，主题信息包括身份识别信息（DN）和公钥。它还包括认证和签发的CA签发这个证书的有效期，还可能有一些其他的信息（或者成为扩展信息），一般由CA自行定义使用的管理信息，譬如序列号等。</p>
<p>表一：证书信息</p>
<table>
<tbody>
<tr>
<td>主题（证书所有人）</td>
<td>识别名，公钥</td>
</tr>
<tr>
<td>签发者</td>
<td>识别名，签名</td>
</tr>
<tr>
<td>有效期</td>
<td>不早于，不晚于</td>
</tr>
<tr>
<td>管理信息</td>
<td>版本，序列号</td>
</tr>
<tr>
<td>扩展信息</td>
<td>基本限制, Netscape标记等</td>
</tr>
</tbody>
</table>
<p>识别名DN是用来提供对某个特定背景下的身份，例如：某个人作为公司的一个雇员而拥有一个证书。识别名DN有X.509标准定义，包括它的字段，字段名和相应的缩写表示。（如表2所示）</p>
<p>表二：识别名(DN)信息</p>
<table>
<tbody>
<tr>
<td>DN字段</td>
<td>缩写</td>
<td>说明</td>
<td>举例</td>
</tr>
<tr>
<td>Common  Name<br />
通用名</td>
<td>CN</td>
<td>证书颁发对象名称</td>
<td>CN=Joe  Average</td>
</tr>
<tr>
<td>Organization  or Company<br />
组织或公司</td>
<td>O</td>
<td>颁发对象所属单位</td>
<td>O=Snake  Oil, Ltd.</td>
</tr>
<tr>
<td>Organizational  Unit<br />
部门</td>
<td>OU</td>
<td>所在单位部门</td>
<td>OU=Research  Institute</td>
</tr>
<tr>
<td>City/Locality<br />
城市</td>
<td>L</td>
<td>所在城市</td>
<td>L=Snake  City</td>
</tr>
<tr>
<td>State/Province<br />
省份</td>
<td>ST</td>
<td>所在省份</td>
<td>ST=Desert</td>
</tr>
<tr>
<td>Country<br />
国家</td>
<td>C</td>
<td>国家代码，见<a href="http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html" target="_blank">ISO 3166-1 A2</a></td>
<td>C=XZ</td>
</tr>
</tbody>
</table>
<p>证书颁发机构可以定义一个策略，指明哪些识别名字段名是可选的，哪些是必需的。很多证书还对某些字段的内容做出要求。例如，Netsacpe浏览器要求一个服务器证书的CN能够匹配通配符样式的域名，例如：*.snakeoil.com。</p>
<p>证书的二进制格式是使用了ASN.1（抽象语法标记）定义[X208] [ PKCS]。  这种表示法定义了如何指定编码规则的内容和如何将信息转换成二进制形式。证书的二进制编码使用了区分编码规则Distinguished Encoding Rules  (DER)，它是基本编码规则Basic Encoding Rules  (BER)的一个子集。对于那些不能采用二进制的信息传递，二进制形式可以转化为一个ASCII形式使用Base64编码[MIME]。当证书放置在Begin和End分割线中的时候，这种编码被称为增强型安全私人邮件格式(PEM  -&#8221;Privacy Enhanced Mail&#8221;) 编码的证书。</p>
<p>PEM编码证书的样例（snakioil.crt)</p>
<pre>Example of a PEM-encoded certificate (snakeoil.crt)
-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
-----END CERTIFICATE-----</pre>
<p>证书颁发机构CA</p>
<p>通过在批准证书之前核实证书请求中的信息，CA可以保证密钥对的私钥所有人的身份。举例，如果Alice请求一个个人证书，证书颁发机构必须首先核实ALICE在证书申请中所提交的个人信息和资料。</p>
<p>证书链</p>
<p>CA机构有时也会为另外一家CA机构颁发证书。当检查证书的时候，ALICE可能需要检查每一级证书的父亲证书，一直找到一个她所能信任的证书为止。为了降低她在检查证书链中遇到一个“坏”证书的风险，ALICE可能会设定可信证书链的深度。</p>
<p>创建一个根CA</p>
<p>如前所述，每个证书需要发行者来声明证书拥有者身份的有效性，一直到最顶层CA。  这就产生了一个问题：谁来保证最顶层CA的权威性，而这个CA是没有发行者。在这个独特的情况下，证书采用一种“自签名”的方式，所以证书的发行者就是证书拥有者自己。浏览器会将一些知名的CA配置成可信，将他们的根证书安装到自己的受信根证书列表中，但如果要自己添加信任的自签名证书，就需要特别当心。</p>
<p>一些公司，例如GeoTrust  和 Verisign已经建立了他们自己的证书颁发机构。这些公司提供以下服务：</p>
<ul>
<li>验证证书请求</li>
<li>处理证书申请</li>
<li>发行和管理证书</li>
</ul>
<p>用户也可以创建自己的证书颁发机构。虽然在互联网上存在比较大的风险，但它在企业内网中是很有用的，可以轻松地验证个人和服务器的身份。<br />
证书管理</p>
<p>建立一个证书机构需要有坚实的行政，技术和管理框架。证书颁发机构不仅颁发证书，他们还要管理好证书，也就是说，他们确定证书在多久的时间内仍然有效，他们有一个列表，里面列举了过去颁发的，但已经不再有效的证书，并且不断更新这个列表（证书吊销清单，或CRL）。</p>
<p>例如：ALICE曾经作为公司的雇员获得一个证书，但她现在已经离开公司了，她的证书就需要被吊销。由于证书只在审核完当事人身份后被签发，并且被传递给需要和当事人沟通的同事，从证书本身告诉去告知它已经被吊销了是不可能的。因此要检查一个证书是否有效，就必须联系CA机构获取证书吊销清单CRL，而这通常是无法自动完成的。</p>
<p>注意：<br />
如果你需要使用一个不是浏览器缺省信任的CA机构，就必须将这个CA的根证书装入浏览器的可信根证书列表，使浏览器可以识别这个CA颁发的服务器证书，但这样做是非常危险的，因为一旦加载了这个CA的根证书，浏览器将接受所有由这个根证书签发的服务器证书。</p>
<p>Secure Sockets Layer(SSL) 安全套接字层</p>
<p>SSL是工作在面对连接网络层（如TCP层）和应用层（HTTP层）之间的协议层。SSL层协议通过为客户端和服务器提供双向认证，对隐私数据的加密，和用数字签名来保证数据完整性，从而提供了一个安全的通信通道。</p>
<p>本协议被设计为支持一系列制定的算法用于加密，数据摘要和签名。这允许对特定服务器的算法选择建立在法律、出口和其他问题的基础上，并且使协议能够利用新的算法。在客户机和服务器试图建立一个对话的时候，会协商算法。</p>
<p>表4：SSL协议的版本</p>
<table>
<tbody>
<tr>
<td>Version</td>
<td>Source</td>
<td>Description</td>
<td>Browser Support</td>
</tr>
<tr>
<td>SSL  v2.0</td>
<td>Vendor  Standard (from Netscape Corp.) [<a href="http://www.myssl.cn/guide/ssl_tls_introduction.asp#SSL2">SSL2</a>]</td>
<td>First  SSL protocol for which implementations exist</td>
<td>-  NS Navigator 1.x/2.x<br />
- MS IE 3.x<br />
- Lynx/2.8+OpenSSL</td>
</tr>
<tr>
<td>SSL  v3.0</td>
<td>Expired  Internet Draft (from Netscape Corp.) [<a href="http://www.myssl.cn/guide/ssl_tls_introduction.asp#SSL3">SSL3</a>]</td>
<td>Revisions  to prevent specific security attacks, add non-RSA ciphers and support for  certificate chains</td>
<td>-  NS Navigator 2.x/3.x/4.x<br />
- MS IE 3.x/4.x<br />
- Lynx/2.8+OpenSSL</td>
</tr>
<tr>
<td>TLS  v1.0</td>
<td>Proposed  Internet Standard (from IETF) [<a href="http://www.myssl.cn/guide/ssl_tls_introduction.asp#TLS1">TLS1</a>]</td>
<td>Revision  of SSL 3.0 to update the MAC layer to HMAC, add block padding for block ciphers,  message order standardization and more alert messages.</td>
<td>-  Lynx/2.8+OpenSSL</td>
</tr>
</tbody>
</table>
<p>如表4所示，有多个SSL协议的版本，其中SSL3.0的一个优势就是它增加了对证书链加载的支持。这项功能使服务器可以将自己的服务器证书和发行者的证书一起传给浏览器。证书链的加载，使得客户机即使没有安装过服务器的中间证书，也可以来验证服务器证书的有效性，因为服务器的中间证书被放在证书链中一起发送给了客户机。SSL  3.0是安全传输层TLS协议的基础，这项协议正由IETF负责制订开发。</p>
<p>建立会话</p>
<p>客户机和服务器同构一种“握手”次序来建立SSL会话，如图1.这个握手次序可能会有所不同，这取决于服务器是否配置成提供服务器证书，或者需要客户机提供客户证书。虽然在其他情况下存在因对密码管理要求不同而不同的“握手”步骤，详见各种SSL协议规范，但本文总结了一个基本的握手次序。<br />
<em>图1：基本握手次序</em></p>
<p>注意：<br />
服务器为每个SSL会话分配一个唯一的会话标识符并缓存在服务器和客户端（直到会话标识符过期），使客户在下次连接的时候减少了握手的时间。</p>
<p>在握手序列中的被客户端和服务器使用的各项要素，如下列所示：</p>
<ol>
<li>协商数据传输中使用的加密套接字。</li>
<li>在客户机和服务器中建立并共享一个会话密钥。</li>
<li>可选的服务器端身份认证</li>
<li>可选的客户端身份认证</li>
</ol>
<p>首先，加密套接字协商，允许客户端和服务器选择一个他们都是支持的加密套接字方式。SSL3.0协议定义了31种加密套接字方式，每一种安全套接字由下列部分组成：</p>
<ul>
<li>密钥交换方法</li>
<li>数据加密传输</li>
<li>创建消息认证码（MAC）的消息摘要</li>
</ul>
<p>这3个要素将在下面的几节中详细描述。<br />
密钥交换方法</p>
<p>密钥交换方法定义在客户端和服务器之间共享双方都同意的，被用于应用数据传输的对称加密的密钥。SSL2.0协议只适用RSA密钥交换方式，而SSL3.0不仅支持RSA密钥交换（在使用证书的情况下），还支持Diffie-Hellman密钥交换（在没有使用证书或者没有客户端和服务器之间通信密钥之前的情况下。）</p>
<p>在决定密钥交换方式中的变量是选择是否需要数字签名和使用什么样的签名。使用私钥签名可以防止在交换共享密钥的时候，遭受中间人攻击。</p>
<p>数据加密传输</p>
<p>SSL在加密会话中的消息时采用传统的对称加密方法，有9种加密方式可以选择，包括也可以选择不加密。</p>
<ul>
<li>No encryption</li>
<li>Stream Ciphers
<ul>
<li>RC4 with 40-bit keys</li>
<li>RC4 with 128-bit keys</li>
</ul>
</li>
<li>CBC Block Ciphers
<ul>
<li>RC2 with 40 bit key</li>
<li>DES with 40 bit key</li>
<li>DES with 56 bit key</li>
<li>Triple-DES with 168 bit key</li>
<li>Idea (128 bit key)</li>
<li>Fortezza (96 bit key)</li>
</ul>
</li>
</ul>
<p>“CBC” 是Cipher Block  Chaining的缩写，意思为密码分组链接，表示前一段加密后的密文被用当前段的加密中使用。</p>
<p>&#8220;DES&#8221; 是指Data Encryption  Standard，有一系列不同的变量。包括DES40和3DES_EDE</p>
<p>&#8220;Idea&#8221; 是目前最好的，也是加密强度最高的算法。</p>
<p>&#8220;RC2&#8243; 是RSA DSI专用的算法。</p>
<p>摘要函数</p>
<p>对信息摘要函数的选择决定了如何从一个记录单元创建一个摘要。SSL支持以下模式：</p>
<ul>
<li>无摘要</li>
<li>128位哈希的MD5</li>
<li>160位的安全哈希算法（SHA &#8211; 1）</li>
</ul>
<p>消息摘要是用来创建一个消息认证码（MAC），MAC是与消息加密，来核实消息的完整性和保护消息不受回放式攻击。</p>
<p>握手次序协议</p>
<p>握手次序使用三个协议：</p>
<ul>
<li>SSL Handshake Protocol. SSL握手协议执行客户端和服务器SSL会话的建立过程。</li>
<li>SSL Change Cipher Spec Protocol .SSL更改密码协议负责协商会话用的密码套接字。</li>
<li>SSL Alert Protocol.SSL告警协议负责在客户端和服务器间传递SSL错误信息。</li>
</ul>
<p>这些协议以及应用协议数据，都被SSL记录协议封装，如图2所示。封装好的数据被不检查数据的低一层的协议传递。下一层的协议对封装协议来说是未知的。<br />
<em>图2：SSL协议栈</em></p>
<p>SSL控制协议对记录协议的封装，使一个正在进行的会话在需要重新协商时，控制协议能够被安全地传输。如果没有前一个会话，则使用空的密码套接字，也就是说，在会话建立以前，不会使用密码也没有验证完整性的消息摘要。</p>
<p>数据传输</p>
<p>SSL记录协议,如图3所示 ,  用于在客户端和服务器之间传递SSL控制协议和应用层数据，必需将这些数据分割成较小的单元，或者将多个较高层协议数据合并为一个单元。它可能会在将这些数据传递到下一层可靠的传递协议前将这些数据压缩、加密和附加一个摘要签名。（注：目前主流的SSL都没有对压缩的支持）。<br />
<em>图3：SSL记录协议</em></p>
<p>安全HTTP通信</p>
<p>SSL最常见的一项用途就是在浏览器和WEB服务器之间加密安全的WEB  HTTP通信。使用加密的HTTP（称为HTTPS），即在SSL协议上使用HTTP协议，并没有排除HTTP协议，不过在URL地址中使用HTTPS来替换原来的HTTP，并使用另外一个服务器端口（HTTPS缺省使用443，HTTP使用80）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.halfroom.com/ssl-andtls.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软件的分类</title>
		<link>http://www.halfroom.com/various-applications.html</link>
		<comments>http://www.halfroom.com/various-applications.html#comments</comments>
		<pubDate>Fri, 30 Apr 2010 14:18:08 +0000</pubDate>
		<dc:creator>灰灰</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.halfroom.com/?p=1106</guid>
		<description><![CDATA[<p>Posted in <a href="http://www.halfroom.com/categories/technology" title="Technology">Technology</a></p>什么叫应用软件？什么叫系统软件？什么叫客户端软件？ 最近被IT行业的“软件”一词搞得有点混，亏得我还是一个计算机专业的学生,还满脑子地想去做开发。。。现在我才明白，我想做的那个玩意儿，应该叫 “应用软件”。先特此收集，答案来自网上 软件（英语：Software）是 一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为函数编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能，但是并不针对某一特定 应用领域。而应用软件则恰好相反，不同的应用软件根据用户和所服务的领域提供不同的功能。 软件并不只是包括可以在计算机上运行的计算机程序，与这些计算机程序相关的文档，一般也被认为是软件的一部 分。简单的说软件就是程序加文档的集合体。软件被应用于世界的各个领域，对人们的生活和工作都产生了深远的影响。 软件是计算机的灵魂，没有软件的计算机就如同没有磁带的录音机和没有录像带的录像机一样，与废铁没什么差别。使用不同的计算机软件，计算机可以完成许许多多不同的工作。它使计算机具有非凡的灵活性和通用性。也正是这一原因，决定了计算机的任何动作都离不开由人安排的指令。人们针对某一需要而为计算机编制的指令序列称为程序。程序连同有关的说明资料称为软件。配上软件的计算机才成为完整的计算机系统。 一般把软件分为两大类：应用软件和系统软件。 系统软件 系统软件是负责管理计算机系统中各种独立的硬件，使得它们可以协调工作。系统软件使得计算机用户和其他软件将计算机当作一个整体而不需要顾及到底层 每个硬件是如何工作的。 一般来说，系统软件包括操作系统和一系列基本的工具（比如编译器，数据库管理，存储器格式化，文件系统管理，用户身份验证，驱动管理， 网络连接等方面的工具）。 应用软件 应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序，比如一个图像浏览器。也可以是一组功能联系紧密，可以互相协作的程序的集 合，比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统，比如数据库管理系统。 较常见的有 字处理软件 如WPS Office、Microsoft Office、OpenOffice.org等 信息管理软件 如Microsoft Access数据库 辅助设计软件 如AutoCAD 实时控制软件 教育与娱乐软件 如考试宝典 图形图像软件 Adobe Photoshop、CorelDRAW、painter、GIMP、3DS MAX、MAYA、Blender、xsi、lightwave、cineme 4d、Houdini 、Krita 后期合成软件 after effects、combustion、digital &#8230; <a href="http://www.halfroom.com/various-applications.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>什么叫应用软件？什么叫系统软件？什么叫客户端软件？</p>
<p>最近被IT行业的“软件”一词搞得有点混，亏得我还是一个计算机专业的学生,还满脑子地想去做开发。。。现在我才明白，我想做的那个玩意儿，应该叫 “应用软件”。先特此收集，答案来自网上</p>
<p><strong>软件</strong>（<a title="英语" href="http://zh.wikipedia.org/zh-sg/%E8%8B%B1%E8%AF%AD">英语</a>：<strong>Software</strong>）是 一系列按照特定顺序组织的<a title="计算机" href="http://zh.wikipedia.org/zh-sg/%E9%9B%BB%E8%85%A6">计算机</a>数据和指令的集合。一般来讲软件被划分为<a title="函数编程语言" href="http://zh.wikipedia.org/zh-sg/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80">函数编程语言</a>、<a title="系统软件" href="http://zh.wikipedia.org/zh-sg/%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6">系统软件</a>、<a title="应用软件" href="http://zh.wikipedia.org/zh-sg/%E5%BA%94%E7%94%A8%E8%BD%AF%E4%BB%B6">应用软件</a>和介于这两者之间的<a title="中间件" href="http://zh.wikipedia.org/zh-sg/%E4%B8%AD%E4%BB%8B%E8%BB%9F%E9%AB%94">中间件</a>。其中系统软件为计算机使用提供最基本的功能，但是并不针对某一特定 应用领域。而应用软件则恰好相反，不同的应用软件根据用户和所服务的领域提供不同的功能。</p>
<p>软件并不只是包括可以在计算机上运行的<a title="计算机程序" href="http://zh.wikipedia.org/zh-sg/%E9%9B%BB%E8%85%A6%E7%A8%8B%E5%BC%8F">计算机程序</a>，与这些计算机程序相关的文档，一般也被认为是软件的一部 分。简单的说软件就是程序加文档的集合体。软件被应用于世界的各个领域，对人们的生活和工作都产生了深远的影响。</p>
<pre>软件是计算机的灵魂，没有软件的计算机就如同没有磁带的录音机和没有录像带的录像机一样，与废铁没什么差别。使用不同的计算机软件，计算机可以完成许许多多不同的工作。它使计算机具有非凡的灵活性和通用性。也正是这一原因，决定了计算机的任何动作都离不开由人安排的指令。人们针对某一需要而为计算机编制的指令序列称为程序。程序连同有关的说明资料称为软件。配上软件的计算机才成为完整的计算机系统。

    一般把软件分为两大类：应用软件和系统软件。
</pre>
<h2><span id="more-1106"></span></h2>
<h2>系统软件</h2>
<p>系统软件是负责管理计算机系统中各种独立的硬件，使得它们可以协调工作。系统软件使得计算机用户和其他软件将计算机当作一个整体而不需要顾及到底层 每个硬件是如何工作的。</p>
<p>一般来说，系统软件包括<a title="操作系统" href="http://zh.wikipedia.org/zh-sg/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F">操作系统</a>和一系列基本的工具（比如<a title="编译器" href="http://zh.wikipedia.org/zh-sg/%E7%BC%96%E8%AF%91%E5%99%A8">编译器</a>，数据库管理，存储器格式化，文件系统管理，用户身份验证，驱动管理， 网络连接等方面的工具）。</p>
<h2>应用软件</h2>
<p>应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序，比如一个图像浏览器。也可以是一组功能联系紧密，可以互相协作的程序的集 合，比如<a title="微软" href="http://zh.wikipedia.org/zh-sg/%E5%BE%AE%E8%BD%AF">微软</a>的<a title="Microsoft  Office" href="http://zh.wikipedia.org/zh-sg/Microsoft_Office">Office</a>软件。也可以是一个由众多独立程序组成的庞大的软件系统，比如<a title="数据库" href="http://zh.wikipedia.org/zh-sg/%E6%95%B0%E6%8D%AE%E5%BA%93">数据库</a>管理系统。</p>
<p>较常见的有</p>
<ol>
<li><a title="字处理器" href="http://zh.wikipedia.org/zh-sg/%E6%96%87%E6%9B%B8%E8%99%95%E7%90%86%E5%99%A8">字处理软件</a> 如<a title="WPS Office" href="http://zh.wikipedia.org/zh-sg/WPS_Office">WPS  Office</a>、<a title="Microsoft Office" href="http://zh.wikipedia.org/zh-sg/Microsoft_Office">Microsoft Office</a>、<a title="OpenOffice.org" href="http://zh.wikipedia.org/zh-sg/OpenOffice.org">OpenOffice.org</a>等</li>
<li><a title="信息管理软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">信息管理软件</a> 如<a title="Microsoft  Access" href="http://zh.wikipedia.org/zh-sg/Microsoft_Access">Microsoft Access</a>数据库</li>
<li><a title="辅助设计软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E8%BE%85%E5%8A%A9%E8%AE%BE%E8%AE%A1%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">辅助设计软件</a> 如<a title="AutoCAD" href="http://zh.wikipedia.org/zh-sg/AutoCAD">AutoCAD</a></li>
<li><a title="实时控制软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E5%AE%9E%E6%97%B6%E6%8E%A7%E5%88%B6%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">实时控制软件</a></li>
<li><a title="教育与娱乐软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E6%95%99%E8%82%B2%E4%B8%8E%E5%A8%B1%E4%B9%90%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">教育与娱乐软件</a> 如<a rel="nofollow" href="http://www.yingsoft.com/ksbao.html">考试宝典</a></li>
<li><a title="图形图像软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E5%9B%BE%E5%BD%A2%E5%9B%BE%E5%83%8F%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">图形图像软件</a> <a title="Adobe  Photoshop" href="http://zh.wikipedia.org/zh-sg/Adobe_Photoshop">Adobe Photoshop</a>、<a title="CorelDRAW" href="http://zh.wikipedia.org/zh-sg/CorelDRAW">CorelDRAW</a>、<a title="Painter" href="http://zh.wikipedia.org/zh-sg/Painter">painter</a>、<a title="GIMP" href="http://zh.wikipedia.org/zh-sg/GIMP">GIMP</a>、<a title="3DS MAX（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=3DS_MAX&amp;action=edit&amp;redlink=1">3DS MAX</a>、<a title="MAYA" href="http://zh.wikipedia.org/zh-sg/MAYA">MAYA</a>、<a title="Blender" href="http://zh.wikipedia.org/zh-sg/Blender">Blender</a>、<a title="Softimage" href="http://zh.wikipedia.org/zh-sg/Softimage">xsi</a>、<a title="Lightwave" href="http://zh.wikipedia.org/zh-sg/Lightwave">lightwave</a>、<a title="Cineme 4d（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Cineme_4d&amp;action=edit&amp;redlink=1">cineme 4d</a>、<a title="Houdini" href="http://zh.wikipedia.org/zh-sg/Houdini">Houdini</a> 、<a title="Krita" href="http://zh.wikipedia.org/zh-sg/Krita">Krita</a></li>
<li><a title="后期合成软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E5%90%8E%E6%9C%9F%E5%90%88%E6%88%90%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">后期合成软件</a> <a title="After effects（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=After_effects&amp;action=edit&amp;redlink=1">after effects</a>、<a title="Combustion（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Combustion&amp;action=edit&amp;redlink=1">combustion</a>、<a title="Digital fusion（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Digital_fusion&amp;action=edit&amp;redlink=1">digital fusion</a>、<a title="Shake" href="http://zh.wikipedia.org/zh-sg/Shake">shake</a>、<a title="Flame（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Flame&amp;action=edit&amp;redlink=1">flame</a></li>
<li><a title="网页浏览器" href="http://zh.wikipedia.org/zh-sg/%E7%B6%B2%E9%A0%81%E7%80%8F%E8%A6%BD%E5%99%A8">网页浏览软件</a> <a title="Internet  Explorer" href="http://zh.wikipedia.org/zh-sg/Internet_Explorer">Internet Explorer 浏览器</a>、<a title="Firefox" href="http://zh.wikipedia.org/zh-sg/Firefox">Firefox</a>、<a title="Google浏览器" href="http://zh.wikipedia.org/zh-sg/Google%E7%80%8F%E8%A6%BD%E5%99%A8">Google浏览器</a>、<a title="Safari" href="http://zh.wikipedia.org/zh-sg/Safari">Safari</a>、<a title="Opera" href="http://zh.wikipedia.org/zh-sg/Opera">Opera</a>、<a title="Konqueror" href="http://zh.wikipedia.org/zh-sg/Konqueror">Konqueror</a></li>
<li><a title="网络通信软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E7%B6%B2%E8%B7%AF%E9%80%9A%E8%A8%8A%E8%BB%9F%E9%AB%94&amp;action=edit&amp;redlink=1">网络通信软件</a> <a title="ICQ" href="http://zh.wikipedia.org/zh-sg/ICQ">ICQ</a>、<a title="MSN" href="http://zh.wikipedia.org/zh-sg/MSN">MSN</a>、<a title="UUcall（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=UUcall&amp;action=edit&amp;redlink=1">UUcall</a>、<a title="Skype" href="http://zh.wikipedia.org/zh-sg/Skype">Skype</a>、<a title="Yahoo!  Messenger" href="http://zh.wikipedia.org/zh-sg/Yahoo%21_Messenger">Yahoo! Messenger</a>、<a title="QQ" href="http://zh.wikipedia.org/zh-sg/QQ">QQ</a>、<a title="AOL  Instant Messenger" href="http://zh.wikipedia.org/zh-sg/AOL_Instant_Messenger">AOL Instant Messenger</a></li>
<li><a title="影音播放软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E5%BD%B1%E9%9F%B3%E6%92%AD%E6%94%BE%E8%BB%9F%E9%AB%94&amp;action=edit&amp;redlink=1">影音播放软件</a> <a title="KMPlayer" href="http://zh.wikipedia.org/zh-sg/KMPlayer">KMPlayer</a>、<a title="GOM Player" href="http://zh.wikipedia.org/zh-sg/GOM_Player">GOM  Player</a>、<a title="WMP" href="http://zh.wikipedia.org/zh-sg/WMP">WMP</a>、<a title="暴风影音" href="http://zh.wikipedia.org/zh-sg/%E6%9A%B4%E9%A3%8E%E5%BD%B1%E9%9F%B3">暴风影音</a>、<a title="风雷影音" href="http://zh.wikipedia.org/zh-sg/%E9%A3%8E%E9%9B%B7%E5%BD%B1%E9%9F%B3">风雷影音</a></li>
<li><a title="音乐播放软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E9%9F%B3%E6%A8%82%E6%92%AD%E6%94%BE%E8%BB%9F%E9%AB%94&amp;action=edit&amp;redlink=1">音乐播放软件</a> <a title="Winamp" href="http://zh.wikipedia.org/zh-sg/Winamp">Winamp</a>、<a title="Foobar2000" href="http://zh.wikipedia.org/zh-sg/Foobar2000">Foobar2000</a>、<a title="千千静听" href="http://zh.wikipedia.org/zh-sg/%E5%8D%83%E5%8D%83%E9%9D%99%E5%90%AC">千千静听</a>、<a title="酷我音乐（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90&amp;action=edit&amp;redlink=1">酷我音乐</a>、<a title="酷狗音乐（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E9%85%B7%E7%8B%97%E9%9F%B3%E4%B9%90&amp;action=edit&amp;redlink=1">酷狗音乐</a></li>
<li><a title="下载管理程序比较" href="http://zh.wikipedia.org/zh-sg/%E4%B8%8B%E8%BD%BD%E7%AE%A1%E7%90%86%E7%A8%8B%E5%BA%8F%E6%AF%94%E8%BE%83">下载管理软件</a> <a title="Orbit（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Orbit&amp;action=edit&amp;redlink=1">Orbit</a>、<a title="迅雷" href="http://zh.wikipedia.org/zh-sg/%E8%BF%85%E9%9B%B7">迅雷</a>、<a title="FlashGet" href="http://zh.wikipedia.org/zh-sg/FlashGet">FlashGet</a>、<a title="超级旋风（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E8%B6%85%E7%BA%A7%E6%97%8B%E9%A3%8E&amp;action=edit&amp;redlink=1">超级旋风</a></li>
<li><a title="邮件管理软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E9%83%B5%E4%BB%B6%E7%AE%A1%E7%90%86%E8%BB%9F%E9%AB%94&amp;action=edit&amp;redlink=1">邮件管理软件</a> <a title="Windows Mail" href="http://zh.wikipedia.org/zh-sg/Windows_Mail">Windows  Mail</a>、<a title="Outlook Express" href="http://zh.wikipedia.org/zh-sg/Outlook_Express">Outlook Express</a>、<a title="Foxmail" href="http://zh.wikipedia.org/zh-sg/Foxmail">Foxmail</a>、<a title="The Bat!（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=The_Bat%21&amp;action=edit&amp;redlink=1">The Bat!</a>、<a title="Dreammail" href="http://zh.wikipedia.org/zh-sg/Dreammail">Dreammail</a>、<a title="KMail" href="http://zh.wikipedia.org/zh-sg/KMail">KMail</a></li>
<li><a title="杀毒软件列表" href="http://zh.wikipedia.org/zh-sg/%E9%98%B2%E6%AF%92%E8%BB%9F%E9%AB%94%E5%88%97%E8%A1%A8">信息安全软件</a> <a title="Avira AntiVir" href="http://zh.wikipedia.org/zh-sg/Avira_AntiVir">德 国小红伞</a>、<a title="卡巴斯基" href="http://zh.wikipedia.org/zh-sg/%E5%8D%A1%E5%B7%B4%E6%96%AF%E5%9F%BA">卡巴斯基</a>、<a title="PC-cillin" href="http://zh.wikipedia.org/zh-sg/PC-cillin">PC-cillin</a>、<a title="诺顿防毒" href="http://zh.wikipedia.org/zh-sg/%E8%AB%BE%E9%A0%93%E9%98%B2%E6%AF%92">诺顿防毒</a>、<a title="BitDefender" href="http://zh.wikipedia.org/zh-sg/BitDefender">BitDefender</a>、<a title="瑞星" href="http://zh.wikipedia.org/zh-sg/%E7%91%9E%E6%98%9F">瑞星杀毒</a>、<a title="金山毒霸" href="http://zh.wikipedia.org/zh-sg/%E9%87%91%E5%B1%B1%E6%AF%92%E9%9C%B8">金山毒霸</a>、<a title="PSA密码管理软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=PSA%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">PSA密码管理软件</a></li>
<li><a title="虚拟化平台软件（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E8%99%9A%E6%8B%9F%E5%8C%96%E5%B9%B3%E5%8F%B0%E8%BD%AF%E4%BB%B6&amp;action=edit&amp;redlink=1">虚拟化平台软件</a> <a title="汉邦极通EWEBS（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E6%B1%89%E9%82%A6%E6%9E%81%E9%80%9AEWEBS&amp;action=edit&amp;redlink=1">汉邦极通EWEBS</a>、<a title="Vmware（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=Vmware&amp;action=edit&amp;redlink=1">vmware</a>、<a title="思杰（尚未撰写）" href="http://zh.wikipedia.org/w/index.php?title=%E6%80%9D%E6%9D%B0&amp;action=edit&amp;redlink=1">思杰</a>、<a title="VirtualBox" href="http://zh.wikipedia.org/zh-sg/VirtualBox">VirtualBox</a></li>
</ol>
<h2>客户端软件</h2>
<p>整个发布系统分为两个模块，一个是软件的供应商端(也即共享软件的作者)，另外一个是客户端(也就是通常意义上的用户)。软件供应商端实现的功能是生成、 管理用户试用序列号以及正式的授权注册序列号。客户端是实现了对试用序列号、正式授权注册序列号的解析操作，实现了软件的保护功能(所谓保护功能，就是试用版的用户只能够在预定的试用期内使用预定的试用功能，授权用户能够使用所有的授权功能)。通过这两个模块的协作，实现了共享软件先试用后购买的销售模 式，极大的降低了软件的开发成本、提高了共享软件的安全特性，使共享软件被破解的可能性降到最低。<br />
客户端，或称为客户机，是指与服务器(server)相对应，为客户提供本地服务的程序；一般安装在普通的客户机，需要与服务端互相配合远行。也就是说， 如果你安装了这个客户端你就可以连接到它的服务器，再通过服务器实现你想要的功能。比如说你现在安装了联众大厅的客户端，你就可以连接到联众大厅的服务 器，选择你要玩的游戏跟别人玩。你按装了QQ的客户端，你就可以连接的QQ的服务器跟那些也安装了QQ客户端的人聊天。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.halfroom.com/various-applications.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse启动参数大全</title>
		<link>http://www.halfroom.com/eclipse-run-parameter.html</link>
		<comments>http://www.halfroom.com/eclipse-run-parameter.html#comments</comments>
		<pubDate>Sat, 20 Mar 2010 11:17:38 +0000</pubDate>
		<dc:creator>灰灰</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://www.halfroom.com/?p=1001</guid>
		<description><![CDATA[<p>Posted in <a href="http://www.halfroom.com/categories/technology" title="Technology">Technology</a></p>http://www.cn-java.com/www1/bbs/viewthread.php?tid=14813 Eclipse 运行命令行参数大全 包括英文版本和中文版本两种的说明, 特别需要值得一提的是那个 -nl 参数, 可以指定程序启动时所使用的语言. 例如: eclipse -nl en_US 将启动英文语言, 这个特性在安装了国际化语言包以后特别有用, 可以方便的切换各个语言的版本. 注意 IBM WSAD v5.1 也支持这个功能. 运行 Eclipse 将 Eclipse 驱动程序安装（解压缩）到某个目录（例如，c:\eclipse）中之后，通过运行顶级安装目录中的 Eclipse 可执行文件来启动&#8221;工作台&#8221;。在 Windows 系统上，该可执行文件称为 eclipse.exe，而在 Linux 系统上称为 eclipse。注意：下列讨论描述 Windows 系统上的设置。Linux 上的设置是相似的。 如果您没有另行指定，则平台将缺省工作区目录创建为可执行文件的兄弟目录（例如 c:\eclipse\workspace）。此工作区目录用作项目的缺省内容区，还用于保存任何必需的元数据。要进行共享安装或多工作区安装，应明确指出工作区的位置而不是使用缺省值。有两种控制工作区位置的方法：使用当前工作目录或使用 -data 命令行自变量。 &#8230; <a href="http://www.halfroom.com/eclipse-run-parameter.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2><a href="http://www.cn-java.com/www1/bbs/viewthread.php?tid=14813">http://www.cn-java.com/www1/bbs/viewthread.php?tid=14813</a></h2>
<h2>Eclipse 运行命令行参数大全</h2>
<p>包括英文版本和中文版本两种的说明, 特别需要值得一提的是那个 -nl 参数, 可以指定程序启动时所使用的语言. 例如:<br />
eclipse -nl en_US<br />
将启动英文语言, 这个特性在安装了国际化语言包以后特别有用, 可以方便的切换各个语言的版本. 注意 IBM WSAD v5.1 也支持这个功能.</p>
<p>运行 Eclipse<br />
将 Eclipse 驱动程序安装（解压缩）到某个目录（例如，c:\eclipse）中之后，通过运行顶级安装目录中的 Eclipse 可执行文件来启动&#8221;工作台&#8221;。在 Windows 系统上，该可执行文件称为 eclipse.exe，而在 Linux 系统上称为 eclipse。注意：下列讨论描述 Windows 系统上的设置。Linux 上的设置是相似的。</p>
<p>如果您没有另行指定，则平台将缺省工作区目录创建为可执行文件的兄弟目录（例如 c:\eclipse\workspace）。此工作区目录用作项目的缺省内容区，还用于保存任何必需的元数据。要进行共享安装或多工作区安装，应明确指出工作区的位置而不是使用缺省值。有两种控制工作区位置的方法：使用当前工作目录或使用 -data 命令行自变量。</p>
<p>将工作区位置设置为在当前工作目录内<br />
在此方案中，工作区位置将是当前工作目录中称为 workspace 的目录。</p>
<p>实现此目的最容易的方法可能是使用下列步骤来创建快捷方式：</p>
<p>导航到 Windows 资源管理器中的 eclipse.exe 并使用右键拖动来创建 eclipse.exe 的快捷方式。<br />
编辑快捷方式的属性，以使启动位置：字段标识工作区位置的父目录（例如，c:\users\robert）。<br />
关闭属性对话框并双击快捷方式（如果提供的目录为 c:\users\robert，则工作区位置将为 c:\users\robert\workspace）。<br />
当然，您也可以使用命令提示符（通过将目录切换为工作区父目录然后运行 eclipse.exe）来获得同样的效果。</p>
<p>使用 -data 设置工作区的特定位置<br />
要使用 -data 命令行自变量，只要将 -data your_workspace_location（例如，-data c:\users\robert\myworkspace）添加至快捷方式属性中的目标字段或显式地将它包括在命令行上。</p>
<p>使用 -vm 设置 java VM<br />
建议显式指定在运行 Eclipse 时要使用哪个 Java VM。使用 -vm 命令行自变量（例如，-vm c:\jre\bin\javaw.exe）可以实现此目的。如果不使用 -vm，则 Eclipse 将使用在 O/S 路径上找到的一个 Java VM。当安装其它产品时，它们可更改您的路径，导致在下一次启动 Eclipse 时使用另一 Java VM。<br />
<span id="more-1001"></span><br />
运行 Eclipse 中的高级主题<br />
Eclipse 可执行文件及平台本身提供了人们感兴趣的开发或调试 Eclipse 各部件的许多执行选项。运行 Eclipse 可执行文件的一般格式是：</p>
<p>eclipse [platform options] [-vmargs [Java VM arguments]]<br />
Eclipse 启动参数  命令 描述  原因<br />
-arch architecture<br />
定义 Eclipse 平台在其上运行的处理器体系结构。Eclipse 平台通常使用 Java os.arch 属性的常用值来计算最佳设置。如果在此处指定该项，则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getOSArch() 用于插件。示例值有：&#8221;x86&#8243;、&#8221;sparc&#8221;、&#8221;PA-RISC&#8221;和&#8221;ppc&#8221;。 2.0<br />
-application applicationId<br />
要运行的应用程序。应用程序由向 org.eclipse.core.runtime.applications 扩展点提供扩展的插件来声明。通常不需要此自变量。如果指定了此项，则该值会覆盖配置提供的值。如果不指定此项，则会运行&#8221;Eclipse 工作台&#8221;。 1.0<br />
-boot bootJarURL<br />
（建议不使用；用 -configuration 代替；支持 1.0 兼容）。Eclipse 平台的引导插件代码（boot.jar）的位置，表示为 URL。如果指定此项，则会用它来为装入 Eclipse 平台引导程序类装入器的类装入器设置类路径。仅当更改 startup.jar 和 boot.jar 的相对位置时才需要它。注意，不允许使用相对 URL。  *1.0<br />
-classloaderproperties [file]<br />
如果指定的话，则使用给定位置处的类装入器属性文件来激活平台类类装入器增强。文件自变量可以是文件路径或 URL。注意，不允许使用相对 URL。单击此处以获得更多详细信息。 2.0.2<br />
-configuration configurationFileURL<br />
Eclipse 平台配置文件的位置，表示为 URL。配置文件确定 Eclipse 平台、可用插件集和主要功能部件的位置。注意，不允许使用相对 URL。当安装或更新 Eclipse 平台时配置文件被写至此位置。  2.0<br />
-consolelog<br />
将 Eclipse 平台的错误日志镜像到用来运行 Eclipse 的控制台。与 -debug 组合时很方便使用。 1.0<br />
-data workspacePath<br />
要运行 Eclipse 平台的工作区的路径。工作区位置也是项目的缺省位置。相对于从中启动 eclipse 的目录来解释相对路径。 1.0<br />
-debug [optionsFile]<br />
将平台置于调试方式，并从给定位置处的文件装入调试选项（如果指定的话）。此文件指示哪些调试点可用于插件以及是否已启用它们。如果未给出文件位置，则平台在启动 eclipse 的目录中查找称为&#8221;.options&#8221;的文件。URL 和文件系统路径都可作为文件位置。 1.0<br />
-dev [classpathEntries]<br />
将平台置于开发方式。将可选类路径条目（用逗号分隔的列表）添加至每个插件的运行时类路径。例如，当工作区包含要开发的插件时，指定 -dev bin 会为每个插件项目的名为 bin 的目录添加类路径条目，允许在其中存储最新生成的类文件。除去了冗余或不存在的类路径条目。 1.0<br />
-endsplash params<br />
用于在 Eclipse 平台启动并运行时关闭闪屏的内部选项。此选项在闪屏处理链中不同的位置有不同的语法和语义。 2.0<br />
-feature featureId<br />
主要功能部件的标识。主要功能部件为 Eclipse 的已启动实例提供了产品个性，并确定使用的产品定制信息。 2.0<br />
-keyring keyringFilePath<br />
磁盘上授权数据库（或&#8221;密钥环&#8221;文件）的位置。此自变量必须与 -password 选项配合使用。相对于从中启动 eclipse 的目录来解释相对路径。 1.0<br />
-nl locale<br />
定义 Eclipse 平台在其上运行的语言环境的名称。Eclipse 平台通常自动计算最佳设置。如果在此处指定该项，则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getNL() 用于插件。示例值有：&#8221;en_US&#8221;和&#8221;fr_FR_EURO&#8221;。 2.0<br />
-nolazyregistrycacheloading<br />
取消激活装入优化的平台插件注册表高速缓存。缺省情况下，仅当需要时才从注册表高速缓存（可用时）中装入扩展的配置元素，以减少内存占用。此选项将在启动时强制完全装入注册表高速缓存。 2.1<br />
-noregistrycache<br />
绕过读写内部插件注册表高速缓存文件。 2.0<br />
-nosplash<br />
运行平台而不显示闪屏。 1.0<br />
-os operatingSystem<br />
定义 Eclipse 平台在其上运行的操作系统。Eclipse 平台通常使用 Java os.name 属性的常用值来计算最佳设置。如果在此处指定该项，则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getOS() 用于插件，并用于解析插件清单文件中提及的路径中 $os$ 变量的出现。示例值有：&#8221;win32&#8243;、&#8221;linux&#8221;、&#8221;hpux&#8221;、&#8221;solaris&#8221;和&#8221;aix&#8221;。 1.0<br />
-password password<br />
授权数据库的密码。与 -keyring 选项配合使用。 1.0<br />
-perspective perspectiveId<br />
启动时要在活动工作台窗口中打开的透视图。如果没有指定该参数，则将打开关闭时活动的透视图。 1.0<br />
-plugincustomization   propertiesFile<br />
包含插件首选项缺省设置的属性文件的位置。这些缺省设置覆盖在主要功能部件中指定的缺省设置。相对于从中启动 eclipse 的目录来解释相对路径。 2.0<br />
-plugins pluginsFileURL<br />
（建议不使用；用 -configuration 代替；支持 1.0 兼容）。 指定 Eclipse 平台查找插件的文件的位置，表示为 URL。该文件为属性文件格式，其中键是任意用户定义名称，值是指向 plugin.xml 文件的显式路径或指向包含插件的目录的路径的用逗号分隔的列表。注意，不允许使用相对 URL。如果指定此项，则此选项会导致创建适当的临时配置。 *1.0<br />
-refresh<br />
启动时执行工作区的全局刷新的选项。这将使从上次平台运行以来在文件系统中所做的任何更改一致。 1.0<br />
-showlocation<br />
用于在窗口标题栏中显示工作区的位置的选项。在发行版 2.0 中，此选项仅与 -data 命令行自变量一起使用。 2.0<br />
-showsplash params<br />
用于显示闪屏（由可执行的 Eclipse 平台启动器执行）的内部选项。此选项在闪屏处理链中不同的位置有不同的语法和语义。 2.0<br />
-vm vmPath<br />
要用来运行 Eclipse 平台的&#8221;Java 运行时环境&#8221;（JRE）的位置。如果不指定此项，则 JRE 位于 jre（它是 Eclipse 可执行文件的兄弟目录）。相对于从中启动 eclipse 的目录来解释相对路径。 1.0<br />
-ws windowSystem<br />
定义 Eclipse 平台在其上运行的 Windows 系统。Eclipse 平台通常使用 Java os.name 属性的常用值来计算最佳设置。如果在此处指定该项，则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getWS() 用于插件、用于配置 SWT 以及用于解析插件清单文件中提及的路径中 $ws$ 变量的出现。示例值有：&#8221;win32&#8243;、&#8221;motif&#8221;和&#8221;gtk&#8221;。 1.0</p>
<p>将 -vmargs 条目后面的所有自变量（但不包括 -vmargs）作为虚拟机自变量（即，在要运行的类的前面）直接传递到所指示的 Java VM。注意：如果 Eclipse 启动在 Java vm 自变量（-vmargs）之后提供的自变量（例如，-data），则 Eclipse 将不会启动并且您将接收到&#8221;JVM 已终止。出口代码为 1&#8243;的错误。</p>
<p>在不同的 VM 上运行<br />
在 J9 上运行 Eclipse<br />
当在 J9 版本 1.5 上运行 Eclipse 时，建议使用以下 VM 选项：</p>
<p>eclipse.exe [eclipse arguments] -vm path_to_j9w.exe             -vmargs -ms:32 -mm:2048 -mo:32768 -moi:32768 -mca:32 -mco:128 -mx:2000000<br />
当在 J9 版本 2.0 上运行 Eclipse 时，J9W 选择的缺省自变量应为合适的选项。但是，要覆盖 Eclipse 可执行文件以内部方式自动设置的参数，必须指定 -vmargs 不带任何参数，如下所示：</p>
<p>eclipse.exe [eclipse arguments] -vm path_to_j9w.exe -vmargs<br />
有关进一步信息，参考 J9 VM 文档和帮助。</p>
<p>在 IBM Developer Kit, Java(TM) Technology Edition VM 上运行 Eclipse<br />
IBM Developer Kit, Java(TM) Technology Edition 1.3 Linux 的缺省 VM 设置适合进行初期研究工作，但在进行大型开发时是不够的。对于大型开发，应修改 VM 自变量以使有更多的堆可用。例如，下列设置将允许 Java 堆增大为 256MB</p>
]]></content:encoded>
			<wfw:commentRss>http://www.halfroom.com/eclipse-run-parameter.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE9最终准备加入HTML5行列</title>
		<link>http://www.halfroom.com/ie9-finally-ready-to-join-the-html5-party-2.html</link>
		<comments>http://www.halfroom.com/ie9-finally-ready-to-join-the-html5-party-2.html#comments</comments>
		<pubDate>Wed, 17 Mar 2010 02:08:47 +0000</pubDate>
		<dc:creator>灰灰</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[业界新闻]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.halfroom.com/?p=987</guid>
		<description><![CDATA[<p>Posted in <a href="http://www.halfroom.com/categories/technology" title="Technology">Technology</a><a href="http://www.halfroom.com/categories/trade-news" title="业界新闻">业界新闻</a></p>For the past few years it seems like Microsoft&#8217;s Internet Explorer has let web standards and competing browsers pass it by.  Internet users with even a hint of technical-savvy were more likely to have tried, and preferred, an alternative to &#8230; <a href="http://www.halfroom.com/ie9-finally-ready-to-join-the-html5-party-2.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the past few years it seems like Microsoft&#8217;s Internet Explorer has  let web standards and competing browsers pass it by.  Internet users  with even a hint of technical-savvy were more likely to have tried, and  preferred, an alternative to IE.  It wouldn&#8217;t be a such an issue if  Microsoft didn&#8217;t have <a href="http://www.netmarketshare.com/browser-market-share.aspx?qprid=2">over  50%</a> of the world&#8217;s browser market share.  This fact has given web  developers countless headaches when they face browser compatibility  issues working with new web standards like SVG, CSS3, and HTML5.  But  the dawn is finally coming for IE users and web developers that have  been putting up with Microsoft&#8217;s browsing dark ages.   At the <a href="http://dotnet.dzone.com/">MIX 10</a> conference today, Microsoft  announced the <a href="http://ie.microsoft.com/testdrive/">release</a> of a IE9 developer preview.  Microsoft&#8217;s new browser will add support  for the latest web technologies including SVG and HTML5.  The company  also announced that they would become a committer for the jQuery  project.</p>
<p>The current software is just a framework right now,  and it&#8217;s in such an early stage that it doesn&#8217;t even have a back button  yet, but more preview versions will arrive in eight week intervals.  The  preview of IE9 showcases new support for SVG 1.1 imagery inline, CSS3,  and of course HTML5.  It also has an Acid3 score of 55 currently and its  CSS3 Selectors all pass the Selector test.  Microsoft also showed its  commitment to developing industry standard test suites by submitting  over 100 additional HTML5, CSS3, DOM, and SVG tests to the W3C.</p>
<p>Following  in the footsteps of Chrome&#8217;s V8, Opera&#8217;s Carakan, and Firefox&#8217;s  SpiderMonkey, IE9 has a creatively-named JavaScript powerhouse of its  own.  The &#8220;Chakra&#8221; JS engine in the IE9 developer preview was tested  against against competitors using the WebKit SunSpider JavaScript  benchmark (see results below).  I&#8217;m sure we&#8217;ll see some benchmarks from  other sources very soon.</p>
<p><img src="http://css.dzone.com/sites/all/files/Screen_shot_2010-03-16_at_2.01.30_PM.png" alt="" /></p>
<p><span id="more-987"></span>IE9 will be able to take advantage of dual- and  quad-core machines as well.  Chakra has multicore support that manifests  when a web page is loaded and Chakra uses a processing core to compile  JavaScript in the background into the computer&#8217;s native language.   Microsoft says this method is different from the JIT (just-in-time)  compilation approach of many browsers.  IE9 will also move some graphics  processing to the GPU instead of the CPU.  The new Microsoft browser  will support H.264 in HTML5 video instead of Ogg Theora, which is a blow  to Mozilla and Opera.</p>
<p>There are plenty of fun test drive demoes  on the IE9 download page including demos for all of the technologies  supported by Microsoft&#8217;s new browser.  The page contains links to SVG  charts, maps, and animations (<a href="http://ie.microsoft.com/testdrive/Performance/40PulsatingBubbles/Default.xhtml">pulsating  bubbles!</a>).  There&#8217;s even an <a href="http://ie.microsoft.com/testdrive/Graphics/35SVG--oids/Default.xhtml">SVG  Asteroids game</a> to play with.  For HTML5, there&#8217;s a simple <a href="http://ie.microsoft.com/testdrive/HTML5/25HTML5_T--Shirt_Designer/Default.xhtml">HTML5  T-shirt designer</a>, but no HTML5 video demos.  For speed tests, you  have to see the <a href="http://ie.microsoft.com/testdrive/Performance/01FlyingImages/Default.html">3-D  spinning block of browser logos</a>, which includes image counts and  Frame Rate.</p>
<p><img src="http://css.dzone.com/sites/all/files/CSS3InfoScreenCapture.png" alt="" width="632" height="530" /></p>
<p>Microsoft is looking for plenty  of feedback on the developer preview and how it handles HTML5, CSS3,  DOM, and SVG.  Specifically they want people to test their HTML5 parsing  rules, XHTML support, Selection APIs, and SVG.  CSS3 support for  Selectors, Namespaces, Colors, Values, Backgrounds, Borders, and Fonts  should also be tested, says Microsoft.</p>
<p>At the conference,  Microsoft also said it would contribute code to the jQuery open source  project along with testing resources.</p>
<h2><strong>via <a href="http://css.dzone.com/news/ie9-finally-ready-join-html5">css.dzone.com</a></strong></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.halfroom.com/ie9-finally-ready-to-join-the-html5-party-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla borrows from WebKit to build fast new JS engine</title>
		<link>http://www.halfroom.com/mozilla-borrows-from-webkit-to-build-fast-new-js-engine.html</link>
		<comments>http://www.halfroom.com/mozilla-borrows-from-webkit-to-build-fast-new-js-engine.html#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:21:39 +0000</pubDate>
		<dc:creator>灰灰</dc:creator>
				<category><![CDATA[Digest]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[diggest]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.halfroom.com/mozilla-borrows-from-webkit-to-build-fast-new-js-engine.html</guid>
		<description><![CDATA[<p>Posted in <a href="http://www.halfroom.com/categories/digest" title="Digest">Digest</a><a href="http://www.halfroom.com/categories/technology" title="Technology">Technology</a></p>Mozilla&#8217;s high-performance TraceMonkey JavaScript engine, which was first introduced in 2008, has lost a lot of its luster as competing browser vendors have stepped up their game to deliver superior performance. Firefox now lags behind Safari, Chrome, and Opera in &#8230; <a href="http://www.halfroom.com/mozilla-borrows-from-webkit-to-build-fast-new-js-engine.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="posterous_autopost">
<div class="posterous_bookmarklet_entry"><a id="aptureLink_sJOWRlXtEq" style="float: left; padding: 0px 6px;" href="http://static.arstechnica.com/foxkeh-webkit.png"><img style="border: 0px none;" src="http://static.arstechnica.com/foxkeh-webkit.png" alt="" width="300px" height="169px" /></a>Mozilla&#8217;s high-performance TraceMonkey JavaScript engine, which was  first introduced in 2008, has lost a lot of its luster as competing  browser vendors have stepped up their game to deliver superior  performance. Firefox now lags behind Safari, Chrome, and Opera in common  JavaScript benchmarks. In an effort to bring Firefox back to the front  of the pack, Mozilla is building a new JavaScript engine called  JägerMonkey.</p>
<p>The secret sauce that will drive Mozilla&#8217;s new JavaScript engine  engine into the fast lane is some code borrowed from Apple&#8217;s WebKit  project. Mozilla intends to bring together the powerful optimization  techniques of TraceMonkey and the extremely efficient native code  generator of Apple&#8217;s JSCore engine. The mashup will likely deliver a  significant boost in Firefox&#8217;s JavaScript execution speed, making  Mozilla&#8217;s browser a formidable contender in the ongoing JavaScript speed  race.</p>
<p><!--page 1-->Mozilla&#8217;s current JavaScript engine uses nanojit as its native code  generator. Adobe originally developed nanojit to power Flash&#8217;s  ActionScript execution and <a href="http://arstechnica.com/business/news/2006/11/8170.ars">released it</a> under an open source software license in 2006. Mozilla and Adobe were  going to use nanojit to build an ECMAScript 4 implementation called  Tamarin, but the project was largely abandoned when ECMAScript 4 was  shelved. Mozilla integrated nanojit into its existing SpiderMonkey  engine and added tracing optimization to build TraceMonkey.</p>
<p>Mozilla&#8217;s new JägerMonkey engine will continue to use nanojit for  some things, but will rely on Apple&#8217;s Nitro Assembler to generate  efficient native code. This will allow JägerMonkey to benefit from the  performance advantages of method-based just-in-time (JIT) compilation.  JägerMonkey will also use tracing optimization to flatten out loops and  speed up other kinds of execution paths that can benefit from further  optimization. Mozilla says that this blend of technologies potentially  offers the best of all worlds.</p>
<p>&#8220;The reason we&#8217;re [building JägerMonkey] is that TraceMonkey is very  fast for code that traces well, but for code that doesn&#8217;t trace, we&#8217;re  stuck with the interpreter, which is not fast. The JägerMonkey method  JIT will provide a much better performance baseline, and tracing will  continue to speed us up on code where it applies,&#8221; wrote developer David  Mandelin a <a href="http://blog.mozilla.com/dmandelin/2010/02/26/starting-jagermonkey/">blog  entry</a> about the new engine.</p>
<p>The project is said to be at a relatively early stage of development  and is not yet ready to be broadly demonstrated. Developers who want to  have a look at the code can <a href="http://hg.mozilla.org/users/danderson_mozilla.com/jaegermonkey/">download  it</a> from Mozilla&#8217;s version control repository. The current <a href="https://wiki.mozilla.org/JaegerMonkey">development status</a> is  described in a page at the Mozilla wiki.</p>
<div>
<h4>Further reading</h4>
<ul>
<li><a href="http://hacks.mozilla.org/2010/03/improving-javascript-performance-with-jagermonkey/">Mozilla  Hacks (1)</a> (hacks.mozilla.org)</li>
<li><a href="http://hacks.mozilla.org/2010/03/a-quick-note-on-javascript-engine-components/">Mozilla  Hacks (2)</a> (hacks.mozilla.org)</li>
</ul>
</div>
<div class="posterous_quote_citation">via http://arstechnica.com/<a href="http://www.dzone.com/links/rss/mozilla_borrows_from_webkit_to_build_fast_new_js.html"></a></div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.halfroom.com/mozilla-borrows-from-webkit-to-build-fast-new-js-engine.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

