Upload
shigekiohtsu
View
3.162
Download
0
Embed Size (px)
Citation preview
内容• 明日朝のセキュリティリリースについて
• Nodeのバージョン おさらいとおすすめ
• 最近のNodeの開発について(体制や環境)
• 最近の開発トピックス
1. Chakra Node
2. Buffer APIのセキュリティ強化
3. Promise APIの導入議論
セキュリテイ リリース• 日本時間2月10日(水)朝8時にリリース予定です。
• Disclose前のため詳細は話せないですが、HTTP処理に関連する脆弱性です。
• Low Severity, node-v0.10~node-v5.xまで全バージョンが対象です。
• https://nodejs.org/en/blog/にアナウンス予定
Nodeのバージョンおさらい• Sem-Verに従います。http://semver.org/
• major.minor.patch (例:Node-4.2.6)
• patch: バグフィックスのみAPI変更なし。
• minor: API機能追加のみ。後方互換性維持。
• major: 非互換の変更が入る。
• LTS(30ヶ月サポート)には元素名がつきます(Argon)
偶数・奇数はたまたま
どのバージョンを使えば良い?• Node-v0.10, Node-v0.12は2016年12月31日でサポート終了。今年中に移行してください。
• Node-v4.x(LTS)は2018年3月31日までサポート
• Node-v5(Stable):機能追加・バグフィックスはがんがんやります。ただし後方互換は維持。Node-v6が出たら非サポート
• 2016年4月にNode-v6のリリース予定。10月に次期LTSへ長く安定して利用したいならその時の最新LTSを選んでください。
Nodeの開発体制Core Technical Committee
• Technical Direction
Node.js Foundation
• Business Direction • マーケティング
Collaborator
• コードレビュー、コミット • Issue/PRの処理
Working Groups
• いろいろ(*1)
エスカレーション
(*1) https://github.com/nodejs/node/blob/master/WORKING_GROUPS.md
test・CIの改善 https://ci.nodejs.org/
• NodeがサポートするCPU/OSは多種多様
• CPU: arm, arm64, ia32, mips, mipsel, ppc, ppc64, x32, x64, x86
• OS: win, mac, solaris,freebsd, openbsd, linux, android, aix
• テスト(1000近く)も非同期タイミングでエラーになるものも多かった。
Merge前に必ず実施
CITGM• Canary In The Gold Mine(いわゆるsmokeテスト)
• これまでバグ修正やAPI追加・変更でユーザモジュールにどういう影響があるのかリリースしないとわからなかった。
• expess, lodash, glup等利用者が多いユーザモジュールのテストをCIとして実施。リリース前にその影響を把握し対応する。
開発中
https://github.com/nodejs/citgm
Node Enhancement Proposals(EPs)
• https://github.com/nodejs/node-eps
• 比較的大きなAPI機能の追加・変更を起案するrepo
現在の提案状況
1 C++ Stream Rejected
2 Websocket 議論中
3 ES6 module 議論中
4 Buffer API 議論中
Express• IBMによるStrongLoopの買収に伴い Express の開発もIBM配下で行われるようになった。
• Expressの開発をより充実したものにするため Node.js Foundation の incubator projectに移すことが話し合われている。
• 具体的にどのような形になるのか以下でアナウンス
• https://github.com/nodejs/TSC/issues/44
Chakra Node• 大きく2つの機能追加
1. ビルド時の指定によるJSEngine追加(V8ShimによるChakraCoreのサポート)、 defaultはV8
2. Windows ARM のサポート
• 現在はWindows OSのみサポート
• Windows用に最適化された chakra.dll(非公開)とのリンクも想定しているもよう。
• Windows Azure, Windows 10 IOT, XBox, Windows Phone 等での利用を想定しているのかも(個人的な予想)
議論中
Chakra NodeNodeコアの変更はわずか
• process.jsEngineの追加
• Symbol.species, デバッガは未サポート
• ARM対応のため gyp/node-gypにも要変更
ShimやChakraCoreの中はまだよく見てません。
議論中
Chakra Nodeの行方• 「Node.jsはVMに対して中立であるべきか?」で議論中
https://github.com/nodejs/roadmap/issues/54
• V8,Chakra,Nodeの3チームが集まって統一APIを作ることができるか3月頭にF2Fで話し合う予定。
• 時間がかかるので、当面Chakraは別レポジトリで管理してもらうことに。(issueが混ざると面倒なため)
https://github.com/orgs/nodejs/teams/chakra
議論中
Buffer• Nodeでバイナリーデータ(バイト列)を扱うクラス
• Node-v0.1の時代から導入されていた。
• 昔 Buffer vs Typed Arrayの議論があったらしい。
• Typed Arrayの標準化の行方がはっきりせず、エンコードの指定も必要との判断からNode独自のBufferで進めることに(要出典 *1)
• V8 APIの廃止に伴い現在はUInt8Arrayにprototypeを付与したものに変更されています。
(*1) 昔どっかのブログで読んだ記憶があるが、見つかりませんでした。
Bufferの問題1. データが初期化されていない。Heapデータが入る
$ node -e 'console.log(new Buffer(8))'
<Buffer b8 a7 03 c7 71 7f 00 00>
2. 初期化引数を間違えるとHeapデータが漏洩?
new Buffer(value): valueをstringを前提としてしまうと、numberだったらどうなる?
これまでどうしてた?• Cのmalloc(3)と同じだからみんなわかるよね。
• ArrayBufferは0で初期化するけどBufferは違うから気をつけましょうってAPI Docにも書いてある。
• 0で初期化すると初期化する分だけ性能に影響する。DoS Vectorにもなりうる。
• これまで律儀にちゃんと new Buffer(n).fill(0)している人はどうなるの?
• 新旧のバージョンで初期化の挙動が変わるのも問題
うーん、どうしましょう• Buffer() コンストラクタの廃止(soft deprecation)
• Buffer.allocUnsafe(size)
• Buffer.alloc(size[, fill])
• Buffer.from(data[, encoding)
• --zero-fill-buffersオプションの導入
(注意:API名・機能は変わる可能性があります。)
議論中
新APIの導入
議論中
Promise• JavaScript の非同期処理のためのクラス
• 当初Nodeで独自実装されていたが、Node-v0.1.30で完全削除された。
• Promiseがまだ仕様化されておらず、ユーザからの要求が多種多様でまとまらないと判断し、単純なコールバック方式のみサポートすることに。
• ES2015で標準化。前倒しでV8で実装されNode-v0.11.13より復活した。
Promise API• Node Core APIでPromiseのサポート
• コールバック方式は維持し、コールバックを指定しないとPromiseが返る
fs.readFile(‘hoge.txt', 'utf8').then((words) => {
console.log(`a picture is worth ${words.split('\n').length} words.`);
}, (err) => {
console.error('there are no words.');
});
議論中
Promise API
• http.getAsync()など一部APIはPromise用にAPIを新設する
http.getAsync(‘http://example.com/').then((res) => {
res.pipe(process.stdout);
});
議論中