yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/09 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
開発者解放裁判
2009/10/11(Sun)23:32:25
 Winnyの開発者が著作権法違反で逮捕され、地裁で有罪判決を受けていた問題で、高裁は逆に著作権法違反のほう助を否定し、無罪判決を言い渡しました。判決では「ほう助の成立には、侵害する者が出る可能性があると認識していただけでなく、ソフトを侵害の用途で使用するようインターネット上ですすめていることが必要」であるとした上で、「ほう助を原審のように認めると、ソフトが存在する限り無限に刑事責任を問われることになるので、罪刑法定主義の観点から慎重に判断しなければならない」と明確に指摘し、被告人の行為はほう助に当たらないと結論しました。
 私も他人事ではありませんので、かねてからこの裁判の行方には強い関心を持ってきましたが、ようやく当然の判決が下ったと言うよりありません。判決の骨子にも「罪刑法定主義」の言葉が現れているように、原判決は法の理念を逸脱した判決であるとさえ言っても過言ではなく、破棄するのは当たり前です。
 いざとなればフライパンでもレンガでも凶器になるのと同様、この世に存在するプログラムやソースコードのほとんどは、何らかの形で悪用される可能性を秘めています。FTPやメールソフトでもファイルの違法なやり取りは可能ですし、暗号化技術は違法なファイルのやり取りの隠蔽に用いられる恐れがあります。ファイル操作やループ処理のような普遍的な操作でさえ、ウイルス作成や電算機破壊に流用できます。
 もし「違法行為に使用できる」プログラムを作ったとして、それで逮捕されるのであれば、それこそ木の枝が存在するだけで「凶器になる」と称して逮捕されるような次元の話です。罪刑法定主義どころか、都合の悪い開発者は即座に逮捕できてしまいます。世の中におよそ絶対に悪用できないプログラムやソースコードが存在しない以上、いかなるプログラムであっても「著作権法違反のほう助の疑いがある」「電算機を破壊する疑いがある」と称すれば、逮捕が可能となってしまうのです。
 判決中で「被告は著作権侵害の可能性を認識はしていたが、著作権侵害の用途で使うようすすめていたとはいえない」と指摘されている通り、被告人に著作権侵害の可能性の認識があったのは確かでしょう。しかしながら、もし可能性を認識していただけで逮捕されてしまうのであれば、何らかの通信ソフトに「著作権法を遵守してください」と注意書きをしたり、CGIプログラムに「サーバーに過剰な負荷をかけないように使用してください」と注意書きをする行為は、それぞれ開発者が著作権法違反や電算機破壊の可能性を認識していたことになりますので、それを口実に逮捕されてしまいかねません。「認識」のみでは罪に問われないとする判断は妥当どころか、そう判断しない方が異常です。
 無論、違法行為に流用できるプログラムを作成し、それを使った違法行為を推奨していたのであれば、逮捕されても文句は言えません。しかしながら、私はWinnyの実物を見たことがないため、実際のところは分かりませんが、違法行為を推奨するどころか著作権法に違反しないよう求める注意書きがなされていたと聞いたことがあります。また、そのような注意書きが存在しなかったとしても、いちいち違法行為をしないよう注意する義務などあるわけがなく、逮捕には全く正当性がありません。常識的に考えて、この件を起訴しようという行動自体がまずもって信じられず、京都府警の私怨、あるいは裏で産業界が暗躍しているなど、何らかの事情を考えない方が困難です。裁判にしても、本来であれば一笑に付されて当然のところを、地裁で有罪判決が出た点には戦慄すら覚えます。
 今回の高裁判決は、そもそも至極当然の判決ですから「評価する」と表現するのも変ですが、ひとまず評価できます。これが判例となれば、恣意的な法運用で「都合の悪い」開発者が逮捕され、その方面の技術も封印されてしまう可能性は低くなりますし、著作権利権者が何らかの技術やその開発者を消し去るための手段として、この種の法を曲解して使用することもできなくなります。
 B-CASといい、JASRACといい、CCCDといい、昨今の著作権利権者の暴走には目に余るものがあります。利用者に不便を押し付けたり、アーティストの意向を完全無視したり、技術の革新を遅らせたりと、利用側ばかりか作成側、ひいては日本中に不利益を与えているのではないかとすら考えざるを得ないほどです。今回の判決が、開発者を戦慄・萎縮させる状況の打破だけにとどまらず、著作権利権者の暴走の歯止めの一助となれば、これほど良いことはありません。

 AdaICのドキュメントのInterfacing with COBOLの項には、AdaからCOBOLのファイルを読み込んで扱っているらしいサンプルがあります。
with Interfaces.COBOL;
with COBOL_Sequential_IO; -- Assumed to be supplied by implementation
procedure Test_External_Formats is
(中略)
end Test_External_Formats;
 ここではCOBOL_Sequential_IOなるものが使用されていますが、そのようなものはAdaの標準ライブラリには存在しません。それもそのはず、長々とコードがあると見落としてしまいがちですが、しっかり「Assumed to be supplied by implementation」と書いてあるのです。それにしても、書き方が少々詩的ではないでしょうか。英語が理解できない私にはつらいです。「もしあなたがこれを使用することを望むなら、それを実装しなさい」とでも書いてくれれば、少しは分かりやすそうなのですが。
 それでは、COBOL_Sequential_IOなるものは実装できるのでしょうか。Adaのプロであれば考えるまでもなく実装してしまいそうですが、残念ながら私は不得手です。しかしながら、以前にAdaのIOは一通り扱ってみたことがあり、その時の経験からすれば実装できそうでしたので、試しに書いてみました。
 まずCOBOLでSEQUENTIAL形式のテストファイルを生成し、
IDENTIFICATION DIVISION.
	PROGRAM-ID. COBOL_FILE.

ENVIRONMENT DIVISION.
	INPUT-OUTPUT SECTION.
		FILE-CONTROL.
			SELECT FTEST ASSIGN TO 'ada_test'
				ORGANIZATION IS SEQUENTIAL
				ACCESS MODE IS SEQUENTIAL.

DATA DIVISION.
	FILE SECTION.
		FD FTEST.
			01 DTEST.
				03 DID PIC 9(4).
				03 DFNAME PIC X(16).
				03 DLNAME PIC X(16).

PROCEDURE DIVISION.
	MAIN-PARAGRAPH.
		OPEN OUTPUT FTEST

		MOVE 1 TO DID
		MOVE 'Ada' TO DFNAME
		MOVE 'Lovelace' TO DLNAME
		WRITE DTEST

		MOVE 2 TO DID
		MOVE 'Haskell' TO DFNAME
		MOVE 'Curry' TO DLNAME
		WRITE DTEST

		MOVE 3 TO DID
		MOVE 'Agner' TO DFNAME
		MOVE 'Erlang' TO DLNAME
		WRITE DTEST

		CLOSE FTEST.
 AdaのDirect_IOを使って読み込んでみます。
with Interfaces.COBOL;
use Interfaces.COBOL;

with Ada.IO_Exceptions , Ada.Direct_IO;
use Ada.IO_Exceptions;

with Ada.Text_IO;
use Ada.Text_IO;

with Ada.Characters.Latin_1;
use Ada.Characters;

procedure Ada_File is
	type lang is record
		id : Alphanumeric(1..4);
		name : Alphanumeric(1..16);
		ulang : Alphanumeric(1..16);
	end record;

	package Lang_IO is new Ada.Direct_IO(lang);
	use Lang_IO;

	file : Lang_IO.File_Type;
	data : lang;

begin
	Open(file , In_File , "ada_test");

	while not End_Of_File(file) loop
		Read(file , data);

		Put_Line(To_Ada(data.id) & Latin_1.HT & To_Ada(data.name) &
			Latin_1.HT & To_Ada(data.ulang));
	end loop;

	Close(file);
end Ada_File;
 結果、上手く動作してしまいました。そもそもあのサンプル、COBOL_Sequential_IOをwithするのではなく、Direct_IOを実体化して使用した方が分かりやすかったのではないでしょうか。
 ところが、これにも落とし穴があります。データが固定長であれば特に問題はありませんが、可変長の場合はデータが変化してしまいます。
IDENTIFICATION DIVISION.
	PROGRAM-ID. COBOL_FILE.

ENVIRONMENT DIVISION.
	INPUT-OUTPUT SECTION.
		FILE-CONTROL.
			SELECT FTEST ASSIGN TO 'ada_test'
				ORGANIZATION IS SEQUENTIAL
				ACCESS MODE IS SEQUENTIAL.

DATA DIVISION.
	FILE SECTION.
		FD FTEST.
			01 DTEST.
				03 DID PIC 9(4).
				03 DLEN PIC 9.
				03 MEMBERS OCCURS 1 TO 3 DEPENDING ON DLEN.
					05 MNAME PIC X(16).

PROCEDURE DIVISION.
	MAIN-PARAGRAPH.
		OPEN OUTPUT FTEST

		MOVE 1 TO DID
		MOVE 1 TO DLEN
		MOVE 'Ada' TO MNAME(1)
		WRITE DTEST

		MOVE 2 TO DID
		MOVE 2 TO DLEN
		MOVE 'Haskell' TO MNAME(1)
		MOVE 'Erlang' TO MNAME(2)
		WRITE DTEST

		CLOSE FTEST.
 この場合、データの長さは可変ですので、ファイルの各データの先頭に32ビットのビッグエンディアンのデータが付加されます。可変でない場合は何も付加されないくせに(OpenCOBOLの場合。他のCOBOLは不明)、全く厄介な仕様です。もし可変長のSEQUENTIALデータを読み取りたいのであれば、まずデータ長4バイトを読み取って確認し、それに応じたバイト数を読み込まなくてはなりません。
 かなり泥臭くはなりましたが、とりあえず実装してみました。最初に以下のCOBOLプログラムでファイルを作っておいて、
IDENTIFICATION DIVISION.
	PROGRAM-ID. COBOL_FILE.

ENVIRONMENT DIVISION.
	INPUT-OUTPUT SECTION.
		FILE-CONTROL.
			SELECT FTEST ASSIGN TO 'ada_test'
				ORGANIZATION IS SEQUENTIAL
				ACCESS MODE IS SEQUENTIAL.

DATA DIVISION.
	FILE SECTION.
		FD FTEST.
			01 DTEST.
				03 DID PIC 9(4).
				03 DNAME PIC X(16).
				03 DLEN PIC 9.
				03 MEMBERS OCCURS 1 TO 5 DEPENDING ON DLEN.
					05 MID PIC 9(4).
					05 MNAME PIC X(16).

PROCEDURE DIVISION.
	MAIN-PARAGRAPH.
		OPEN OUTPUT FTEST

		MOVE 1 TO DID
		MOVE '資産' TO DNAME
		MOVE 3 TO DLEN

		MOVE 1 TO MID(1)
		MOVE '現金' TO MNAME(1)

		MOVE 2 TO MID(2)
		MOVE '当座預金' TO MNAME(2)

		MOVE 3 TO MID(3)
		MOVE '売掛金' TO MNAME(3)

		WRITE DTEST

		MOVE 2 TO DID
		MOVE '負債' TO DNAME
		MOVE 2 TO DLEN

		MOVE 4 TO MID(1)
		MOVE '買掛金' TO MNAME(1)

		MOVE 5 TO MID(2)
		MOVE '未払金' TO MNAME(2)

		WRITE DTEST

		MOVE 3 TO DID
		MOVE '費用' TO DNAME
		MOVE 1 TO DLEN

		MOVE 6 TO MID(1)
		MOVE '仕入' TO MNAME(1)

		WRITE DTEST

		CLOSE FTEST.
 それをAdaで読み込みます。
with Interfaces.COBOL;
use Interfaces.COBOL;

with Ada.IO_Exceptions , Ada.Streams.Stream_IO;
use Ada.IO_Exceptions , Ada.Streams , Ada.Streams.Stream_IO;

with Ada.Text_IO , Ada.Integer_Text_IO;
use Ada.Text_IO , Ada.Integer_Text_IO;

with Ada.Characters.Latin_1;
use Ada.Characters;

with Ada.Unchecked_Conversion;

procedure Ada_File is
  type Member is record
    id : Numeric(1..4);
    name : Alphanumeric(1..16);
  end record;

  type Member_Array is array(Integer range <>) of Member;

  type Content is record
    id : Numeric(1..4);
    name : Alphanumeric(1..16);
    len : Numeric(1..1);
    members : Member_Array(1..5);
  end record;

  function Get_Size(stream : Stream_Element_Array)
    return Stream_Element_Offset is
    result : Integer := 0;
  begin
    for i in 1..4 loop
      result := result ** 8 + Integer(stream(Stream_Element_Offset(i)));
    end loop;

    return Stream_Element_Offset(result);
  end Get_Size;

  type ID_Type is delta 1.0 digits 4;
  package Decimal_ID is new Decimal_Conversions(ID_Type);

  type Length_Type is delta 1.0 digits 1;
  package Decimal_Length is new Decimal_Conversions(Length_Type);

  file : Ada.Streams.Stream_IO.File_Type;
  size : Stream_Element_Offset := 0;
  offset : Stream_Element_Offset;

  data : Content;

begin
  Open(file , In_File , "ada_test");

  begin
    while not End_Of_File(file) loop
      -- サイズを読み取る
      declare
        s : Stream_Element_Array(1..4);
      begin
        Read(file , s , offset);
        size := Get_Size(s);
      end;

      -- サイズに応じて処理
      declare
        subtype COBOL_Record_Stream_Element_Array is 
          Stream_Element_Array(1..size);
        function Conversion is new Ada.Unchecked_Conversion(
          COBOL_Record_Stream_Element_Array , Content);
        d : COBOL_Record_Stream_Element_Array;
      begin
        Read(file , d , offset); 
        data := Conversion(d);
      end;

      declare
        occurs : Integer := Integer(Decimal_Length.To_Decimal(
          data.len , Unsigned));
      begin
        Put(Integer(Decimal_ID.To_Decimal(data.id , Unsigned)));
        Put_Line(Latin_1.HT & To_Ada(data.name));

        for i in 1..occurs loop
          Put(Latin_1.HT);
          Put(Integer(Decimal_ID.To_Decimal(data.members(i).id , Unsigned)));
          Put_Line(Latin_1.HT & To_Ada(data.members(i).name));
        end loop;
      end;
    end loop;
  exception
    when Ada.Streams.Stream_IO.End_Error =>
      Put_Line("ファイルを最後まで読み込みました。");
  end;

  Close(file);
end Ada_File;
 まともなAda使いの方であれば、絶対にもっとまともなコードを書くはずですが、私ではこの程度が限界でした。結果は以下の通りです。
1	資産
	1	現金
	2	当座預金
	3	売掛金
2	負債
 	4	買掛金
	5	未払金
3	費用
	6	仕入
 ついでにRELATIVEファイルも処理してみます。RELATIVEファイルは「RECORD KEY * 1レコードのバイト数」によって読み取り開始位置を求める構造ですので、可変長のデータは構造上存在せず、可変長配列であってもしっかり最大長分のデータが保存されます。また、SEQUENTIALのように順次読み取るのには向いておらず、ランダムアクセスに向いた形式です。
 他のCOBOL処理系での動作は不明ですが、少なくともOpenCOBOLの場合、RELATIVEファイルの先頭4バイトにはレコードサイズが格納され、その後にデータが格納されます。ところが、SEQUENTIALの場合と違い、サイズデータはなぜかリトルエンディアンです(多くの言語はリトルエンディアンであるため、こちらの方が扱いやすいとはいえますが)。また、存在しないレコードや削除されたレコードのサイズには0が格納されます。ただし、サイズがいかなる値であれ、1レコードの占有サイズは変わりません
 こちらはDirect_IOで読めそうですので、Direct_IOを使って処理を書いてみました。まず以下のCOBOLプログラムを実行し、ファイルを作成しまして、
IDENTIFICATION DIVISION.
	PROGRAM-ID. COBOL_FILE.

ENVIRONMENT DIVISION.
	INPUT-OUTPUT SECTION.
		FILE-CONTROL.
			SELECT FTEST ASSIGN TO 'ada_test'
				ORGANIZATION IS RELATIVE
				ACCESS MODE IS RANDOM
				RECORD KEY IS DID.

DATA DIVISION.
	FILE SECTION.
		FD FTEST.
			01 DTEST.
				03 DID PIC 9(4).
				03 DGENRE PIC X(4).
				03 DTITLE PIC X(64).
				03 DDESCRIBE PIC X(128).

PROCEDURE DIVISION.
	MAIN-PARAGRAPH.
		OPEN OUTPUT FTEST

		MOVE 1 TO DID
		MOVE 'ARPG' TO DGENRE
		MOVE 'コボル・ハンター 4つのディヴィジョン' TO DTITLE
		MOVE '世界の原理である4つのディヴィジョンをめぐる、' &
		'魔界の小鬼コボルと人類の対立を描いたARPG。' TO DDESCRIBE
		WRITE DTEST

		MOVE 2 TO DID
		MOVE 'ARPG' TO DGENRE
		MOVE 'コボル・ハンター 絶滅への道' TO DTITLE
		MOVE '前回より四半世紀後。コボルの生息域は' &
		'大幅に狭まり、絶滅の危機に瀕していた。' TO DDESCRIBE
		WRITE DTEST

		MOVE 3 TO DID
		MOVE 'RPG' TO DGENRE
		MOVE 'プリンセス エイダ' TO DTITLE
		MOVE '産業革命の時代を生きる、貴族の娘エイダの物語。' TO DDESCRIBE
		WRITE DTEST

		MOVE 4 TO DID
		MOVE 'RPG' TO DGENRE
		MOVE 'キャメルエイジ' TO DTITLE
		MOVE '中世エジプトを舞台にした、交易・冒険・戦闘RPG。' &
		'名作MLからシステムの多くを引き継いだ。' TO DDESCRIBE
		WRITE DTEST

		MOVE 5 TO DID
		MOVE 'SLG' TO DGENRE
		MOVE 'モナドロジー・モナド' TO DTITLE
		MOVE '「状態」を制御する力「モナド」の使い方がカギの' &
		'本格的な戦略シミュレーションRPG。' TO DDESCRIBE
		WRITE DTEST

		MOVE 6 TO DID
		MOVE 'TBL' TO DGENRE
		MOVE 'パイソン・アンド・ラダー' TO DTITLE
		MOVE '最大4人対戦が可能な、外国のすごろくが' &
		'モデルのテーブルゲーム。' TO DDESCRIBE
		WRITE DTEST

		MOVE 7 TO DID
		MOVE 'PZL' TO DGENRE
		MOVE '電話交換手アーラン' TO DTITLE
		MOVE '電話交換手をテーマとした、' &
		'斬新でユニークなパズルゲーム。' TO DDESCRIBE
		WRITE DTEST

		MOVE 8 TO DID
		MOVE 'SIM' TO DGENRE
		MOVE 'カフェベイブ' TO DTITLE
		MOVE '小さなテナント店「カフェベイブ」を' &
		'世界一のコーヒー店に成長させてください。' TO DDESCRIBE
		WRITE DTEST

		CLOSE FTEST

*		一部のレコードを削除
		OPEN I-O FTEST

		MOVE 1 TO DID
		DELETE FTEST

		MOVE 5 TO DID
		DELETE FTEST

		CLOSE FTEST.
 これをAdaで読み取ります。なお、上記サンプルデータにCOBOLへの皮肉が入っていることは言うまでもありません。
with Interfaces.COBOL;
use Interfaces.COBOL;

with Ada.Direct_IO;

with Ada.Text_IO , Ada.Integer_Text_IO;
use Ada.Text_IO , Ada.Integer_Text_IO;

with Ada.Characters.Latin_1;
use Ada.Characters;

with Ada.Strings.Fixed;
use Ada.Strings , Ada.Strings.Fixed;

procedure Ada_File is
  -- レコードサイズ型(32ビット)
  type Size_Number is mod (2 ** 32);

  -- COBOL のレコードに対応するレコード
  type Content is record
    id : Numeric(1..4);
    genre : Alphanumeric(1..4);
    title : Alphanumeric(1..64);
    describe : Alphanumeric(1..128);
  end record;

  -- RELATIVE レコードに対応するレコード
  type Relative_Content is record
    size : Size_Number;
    data : Content;
  end record;

  package Relative_IO is new Ada.Direct_IO(Relative_Content);
  use Relative_IO;

  type ID_Type is delta 1.0 digits 4;
  package Decimal_ID is new Decimal_Conversions(ID_Type);

  file : Relative_IO.File_Type;
  record_data : Relative_Content;

  -- 末尾のスペースをすべて削除する関数
  function Text_Triming(str : String; c : Character := ' ')
    return String is
  begin
    return Head(str , Index_Non_Blank(str , str'Last , Backward));
  end Text_Triming;

begin
  Open(file , In_File , "ada_test");

  for i in 1..8 loop
    begin
      Put("Record Key: ");
      Put(i);
      New_Line;

      Read(file , record_data , Relative_IO.Positive_Count(i));

      -- size = 0 の場合はデータがない
      if record_data.size /= 0 then
        Put(Integer(Decimal_ID.To_Decimal(record_data.data.id , Unsigned)));
        Put_Line(Latin_1.HT & To_Ada(record_data.data.genre) & Latin_1.HT &
          Text_Triming(To_Ada(record_data.data.title)));
        Put_Line(Latin_1.HT & Text_Triming(To_Ada(record_data.data.describe)));
      else
        raise Relative_IO.End_Error;
      end if;
    exception when Relative_IO.End_Error =>
      Put_Line(Latin_1.HT & "データがありません。");
    end;
  end loop;

  Close(file);
end Ada_File;
 全くスマートではありませんが、ひとまず無事にファイルが読み込めました。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 2]
<- 前の記事を参照 次の記事を参照 ->

Comments(2)
yamicha.com - 2010/03/14(Sun)14:41:24
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用したこともなく、基本的には「(セキュリティの面からも)使うべきでない」という立場を取っていますが、少なくとも原審については「罪刑法定主義に反する」の一言ではないでしょうか。現行の著作権法からして、「幇助」に問うのは無理があるように感じます。
そして、高裁が指摘しているような部分(ほう助を原審のように認めると〜)で無理が通ってWinnyが有罪となれば、その他のものもなし崩し的に有罪とみなされる余地が出てきて、最終的には開発の自由が著しく阻害されるのではないかという危惧を、私は非常に強く持っています。
「産業界の陰謀」はうがった見方かもしれませんが、Winny問題自体に産業界が直接絡んではいなくても、なし崩し的に様々なソフトの開発が違法であるとみなされる余地が出てきたら、産業界の面々が都合の悪い開発者(金子氏のような「灰色」の部分がある開発者どころか、「正当」な開発者も含めて)を次から次へと訴え、あるいは恫喝していく危険はあるのではないかと考えています。仮に「正当」な開発者なら無罪を勝ち取ることができるとしても、裁判にかかる手間や費用を考えると、威嚇効果は相当なものでしょう。
無論、いくらなんでもそこまではしないと信じたいところですが、ひどいところでは自社利益の保護のため、コンテンツにルートキットウイルスを組み込むような行為(ソニーBMG問題)をやってのける産業界にモラルを期待できようはずもなく、そのような懸念がこの記事を書く動機にもなっています(前述の通り、私は原審に罪刑法定主義上の問題があると考えていますが、もし本裁判の結果が他に波及する懸念がないのであれば、私自身はWinnyとは何の接点もないため、特に何も言及する必要はないと判断したでしょう)。
ただ、上記のような懸念が前提にあるとはいえ、「記事が先走りすぎ」という点に関しては、重く受け止めたいと思います。
コメントありがとうございました。

通りすがり - 2010/03/08(Mon)12:45:24
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発・発表したという時点で訴えられてやむなしと感じます。
この板では逮捕者がいくらかでている現時点に至ってなお、(Winnyに限らず)違法に有料コンテンツなりなんなりをこれでロハで手に入れられるような書き込みがばんばん行われており、このような場所を開発拠点に据えていた金子氏(47氏とも)が「被告は著作権侵害の可能性を認識はしていたが、著作権侵害の用途で使うようすすめていたとはいえない」というのはお為ごかしであって、検察側が47氏と本人の一意性が証明できなかったというだけに思われるわけです。
陰謀云々は穿ちすぎでしょう。

- Blog by yamicha.com -