ここから本文です

リバースエンジニアリングというのは具体的にはどういうものを言うのでしょうか。 ...

観察者さん

2013/6/1211:22:35

リバースエンジニアリングというのは具体的にはどういうものを言うのでしょうか。

Wikipediaには次のように書かれています。
―――

機械を分解したり、製品の動作を観察したり、ソフトウェアの動作を解析するなどして、製品の構造を分析し、そこから製造方法や動作原理、設計図、ソースコードなどを調査する事である。
―――

Unixの動作を真似てLinuxを作り出したり、.NETの動作を解析してMonoを作ったりする行為は、たとえソースコードを流用しなくても上の文に当てはまると思います。それでもリバースエンジニアリングには当たらないのでしょうか。リバースエンジニアリングに当たらないとしたらなぜですか?

閲覧数:
474
回答数:
2

違反報告

ベストアンサーに選ばれた回答

khurataさん

2013/6/1215:08:06

nobumichiharasawa さんのご回答で正しいのですが、やや分かりにくい表現があると感じました。
私なりに回答すると、次のようになります。

「UNIX を真似て Linux を作る」ことや、「.NET を真似て Mono を作る」事が、なぜリバース・エンジニアリングに当たらないかと言えば、
UNIX(POSIX)や .NET は、その仕様が決まっていて、かつ、公開されているからです。
いずれも国際規格として誰でも入手出来るものであり、仕様そのものを「突き止める」「解明する」必要がありません。
公開された仕様を満たすものを、誰でも作ってよいわけです。

対して、
仕様が公開されていないものについて、その振る舞い(どういう入力に対してどういう出力をするか)をとことん調べ上げ、その動作を満たす仕様を類推して、同じ振る舞い・使用結果を示すものを作る(「同じ仕様」ではない事に注意)、というのが、リバース・エンジニアリングです。
従って、リバース・エンジニアリングで類推される仕様は、本来の仕様とは異なっている事も普通にあります。
想定される全ての入力に対して、元のものと同じ出力を返すものが作れればリバース・エンジニアリングは完了ですから、実装や仕様が元のものと同じかどうかは問題ではありません。
ですから、リバース・エンジニアリングをする側が想定していない入力に関しては、元のものと異なる振る舞いをする事が有り得ます。

たとえば、「1より大きい整数Nを入力した時、1から入力値までの合計を求める」というものがあったとして、
元のそれは(1+N)*N/2という公式に従ったものであり、
リバース・エンジニアリングで作ったものが「1からNまで順番に足す」ものであるとしても、
リバース・エンジニアリングは達成されたと言えます。
この両者は、「仕様は違うが使用結果は同じ」です。

質問した人からのコメント

2013/6/18 19:29:41

笑う なるほど、そういうことでしたか。ご回答ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

原沢信道さん

2013/6/1211:52:57

>リバースエンジニアリングに当たらないとしたらなぜですか?
既に出来ている物を調べて解析する場合に言う事ですので、真似をする事自体はリバースエンジニアリングにはなりません。LinuxもMONOも既に作られているソフトを解析して作ったものではなく、仕様を元に全てのコーディングを0から行っているので、リバースエンジニアリングではありません。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる