審決検索MVP
← 検索一覧に戻る
特許拒絶査定不服審判

2022-018106

安全なジャストインタイム(JIT)コード生成

審判番号
2022-018106
法域
特許
審判種別
拒絶査定不服審判(拒絶査定不服の審決)
出願番号
特願2018-035322外部サイト(J-PlatPat)へ移動します
請求日
2022年11月10日
審決日
2023年04月05日
公報発行日
2023年09月29日
結論
請求不成立
審判長/審判官
分類
P18 .121-Z (G06F)
条文(本文から自動抽出・参考)
特許法第29条第2項、特許法第29条
データ出所
審決公報(XML)

事件の表示

特願2018- 35322「安全なジャストインタイム(JIT)コード生成」拒絶査定不服審判事件〔平成30年 9月27日出願公開、特開2018-152061〕について、次のとおり審決する。

結論

結 論
本件審判の請求は、成り立たない。

理由

目次 ▾ 11項目
理 由

第1 手続の経緯

本願は、2018年(平成30年)2月28日(優先権主張 2017年3月5日)を出願日とする特許出願であって、その後の手続の概要は、以下のとおりである。

令和3年11月 8日付け:拒絶理由通知書
令和4年 2月15日 :意見書、手続補正書の提出
令和4年 7月 4日付け:拒絶査定
令和4年11月10日 :審判請求書の提出

第2 本願発明

本願請求項1ないし20に係る発明は、令和4年2月15日に提出された手続補正書に係る手続補正で補正された特許請求の範囲の請求項1ないし20に記載された事項により特定される発明であり、このうち請求項20に係る発明(以下、単に「本願発明」という。)は、以下のとおりの発明である。

「 少なくとも1つのハードウェアプロセッサによって、ジャストインタイム(JIT)でコードを生成する方法であって、
JIT実行プロセスとJITコンパイルプロセスとは異なるプロセスであり、前記JIT実行プロセスと前記JITコンパイルプロセスは、単一の共有メモリを使用し、
前記JIT実行プロセスは、前記共有メモリへの書込みアクセス権を持たず、
前記JITコンパイルプロセスは、前記共有メモリからの実行アクセス権を持たない、方法。」

第3 原査定の拒絶の理由

令和4年7月4日付け拒絶査定(以下、「原査定」という。)の拒絶の理由は、この出願の請求項1ないし20に係る発明は、本願の優先権主張の日(以下「優先日」という。)前に日本国内又は外国において、頒布された又は電気通信回線を通じて公衆に利用可能となった下記の引用文献1及び2に記載された発明に基いて、その出願前にその発明の属する技術の分野における通常の知識を有する者(以下、「当業者」という。)が容易に発明をすることができたものであるから、特許法第29条第2項の規定により特許を受けることができない、というものである。

引用文献1:特開2006-48186号公報
引用文献2:特表2010-511227号公報

第4 引用文献の記載及び引用発明

1 引用文献1について

(1)引用文献1の記載事項

折りたたみ中(クリックで表示)

引用文献1には、図面とともに以下の事項が記載されている。

ア 「【0011】
JavaVMなど、プログラムを実行時にコンパイルする言語処理系に本発明を適用し、プログラムの実行を担当するプロセスと、コンパイルを担当するプロセスを分離する。」
イ 「【0012】
本発明を適用したJavaVMの実行イメージを図1に示す。図1において、JavaVM101はハードディスク102にインストールされており、実行時にバス103を通じて主記憶104に読み込まれ、プロセッサ105で実行される。JavaVMは、バス103を通じてハードディスク102からJavaアプリケーション106を読み込み、動的コンパイラでコンパイルして実行する。
【0013】
本発明のJavaVM101は、図1にあるように、実行時に、Javaアプリケーションの実行を担当するプロセス107と動的コンパイラ108の、2つのプロセスに分かれて動作する。それぞれのプロセスは共有メモリ領域109によって接続されている。共有メモリ領域109は、メモリマップトファイルなどとして実現できる。共有メモリ領域109の中には、通信用領域110と、保護領域111がある。通信用領域110には、2つのプロセスが通信をおこなうために用いるデータ構造を配置し、保護領域111には、動的コンパイラ108が生成したコンパイル済コード112や、コンパイル済コードのアドレス113を登録する表であるディスパッチ表114を配置する。ディスパッチ表114に登録してあるデータである、コンパイル済コードのアドレス113は、動的コンパイラが生成するデータの実施例である。保護領域111はJavaアプリケーションの実行を担当するプロセス107から書込不可に指定されており、したがって、攻撃者がJavaVMに入力を与えても、入力を受けとって処理するのは実行を担当するプロセス107であるため、保護領域111の中にあるコンパイル済コード112やディスパッチ表114を書き換えることはできない(実行時スタック115やインスタンス用ヒープ領域116は書き換えられる)。また、動的コンパイラが機械コードを一時的に保存するコードバッファなどのワーク領域117は、動的コンパイラのプロセスのみが参照可能な領域に確保されており、実行を担当するプロセス107から読書きできない。したがって、ワーク領域117を攻撃対象とすることもできない。
続きを表示(全12行)
【0014】
本発明の適用対象である言語処理系(本実施例においてはJavaVM)の実施例を図2に示す。JavaVMは、図2にあるように、まず起動に伴う初期化処理201を実施し、次に処理202で、main()メソッドから先にあるJavaアプリケーション本体の実行をおこない、最後に終了処理203を実施する。
【0015】
本発明の適用対象は処理201の内部にある。処理201の実施例を図3に示す。図3では、処理301で、共有メモリ領域109を読み書き可能な領域として確保し、その内部に通信用領域110と保護領域111を確保する。続く処理302で、通信用領域110の中に、プログラムを実行するプロセスがコンパイル対象として指定するメソッドの待ち行列303を生成し、空の待ち行列として初期化する。処理302が終了したら、処理304に進み、動的コンパイラを子プロセス108として起動する。処理304以降、親プロセスはプログラムの実行を担当するプロセス107となる。親プロセスは処理304が終了したら、処理305に進み、処理301で確保した領域のうち、保護領域111を書込不可に指定して保護する。
【0016】
本発明を適用しない場合における、処理201の実施例を図4に、図4の処理201を使う従来のJavaVMの実行イメージを図5に示す。図4では、処理401でヒープ領域402を確保し、その内部に通信用領域110とコード領域403を確保する。続く処理302で、通信用領域110の中に、プログラムを実行するプロセスがコンパイル対象として指定するメソッドの待ち行列303を生成し、空の待ち行列として初期化する。処理302が終了したら、処理404に進み、動的コンパイラをスレッドとして起動する。図4では、コード領域403に保護をかけることはしない。なぜなら、一般的なスレッドの実装では、特定のスレッドのみ書込可能なメモリ領域を設定することは不可能であり、処理404で起動する動的コンパイラのスレッドがコード領域403に書込可能である必要がある以上、コード領域403を書込不可に設定できないからである。図5を参照すると、実行担当のスレッド501と動的コンパイラのスレッド502が同一のプロセス503内で動作しており、コード領域403が、実行担当のスレッド501からも書込可能になっていることが判る。
【0017】
図3と図4を比較すると、処理301と処理304、処理305が本発明の適用対象となっていることが判る。すなわち、処理301は、従来の処理401とは異なり、動的コンパイラが参照しうる領域を、ただのヒープ領域402ではなく、共有メモリ領域109として確保する。また、処理304は、従来の処理404とは異なり、動的コンパイラをスレッドではなく、子プロセス108として起動し、処理305は保護領域111を書込不可と指定して保護する。この結果、図2の処理202を実行している過程で、Javaアプリケーションの実行を担当するプロセス107が、攻撃者からの入力を受けとっても、動的コンパイラの生成した機械コードやデータを書き換えることは困難になる。これに対し、図4では動的コンパイル済みコードを配置するための領域403を書込不可としないので、動的コンパイル済みコードが書き換えられ、攻撃者に任意のコードを実行される可能性がある。」
ウ 「【図1】
[図:0001401443000001.jpg]
」
エ 「【図2】
[図:0001401443000002.jpg]
」
オ 「【図3】
[図:0001401443000003.jpg]
」
カ 「【図4】
[図:0001401443000004.jpg]
」

(2)引用発明

前記(1)アの「JavaVMなど、プログラムを実行時にコンパイルする言語処理系」より、引用文献1には、「JavaVM」により「プログラムを実行時にコンパイルする」方法が記載されているといえる。

したがって、前記(1)の特に下線部を着目すると、引用文献1には、以下の発明(以下「引用発明」という。)が記載されているといえる。

「 JavaVMによりプログラムを実行時にコンパイルする方法であって、
JavaVM101はハードディスク102にインストールされており、実行時にバス103を通じて主記憶104に読み込まれ、プロセッサ105で実行され、
JavaVM101は、バス103を通じてハードディスク102からJavaアプリケーション106を読み込み、動的コンパイラでコンパイルして実行し、
JavaVM101は、Javaアプリケーションの実行を担当するプロセス107と動的コンパイラ108の、2つのプロセスに分かれて動作し、
それぞれのプロセスは共有メモリ領域109によって接続され、
共有メモリ領域109の中には、通信用領域110と、保護領域111があり、通信用領域110には、2つのプロセスが通信をおこなうために用いるデータ構造を配置し、保護領域111には、動的コンパイラ108が生成したコンパイル済コード112や、コンパイル済コードのアドレス113を登録する表であるディスパッチ表114を配置し、
保護領域111はJavaアプリケーションの実行を担当するプロセス107から書込不可に指定される、
方法。」

2 引用文献2について

引用文献2には、図面とともに以下の事項が記載されている。

(1)「【0025】
どのような場合でも、図1Aは、アプリケーションプログラム110がより低い特権モード(たとえば、「ユーザー」モード)で実行され、一方JITコンパイラ105はより高い特権モード(たとえば、「カーネル」モード)で動作していることも示す。たとえば、図1Aは、アプリケーションプログラム110がユーザー特権を有するユーザーモード113で動作し、一方JITコンパイラ105は対応するカーネル特権を有するカーネルモード103で動作していることを示す。さらに、図1Aは、中間言語コード115が、カーネル103レベルの特権を有する1つまたは複数の構成要素によってアクセスされることを示す。反対に、また本明細書でより完全に理解されるように、実行コードは、ユーザー113レベルの特権で動作する構成要素によってのみ実行されることになる。」
(2)「【0033】
どのような場合でも、図1Bは、ページテーブル180が、メモリロケーション160および165をアドレス空間170、175、190、および195に相互に関連付けることを示す。たとえば、メモリロケーション160は共有メモリヒープであり、メモリロケーション165は、アプリケーションプログラム110が実行のためにロードされるロケーションである。さらに、ページテーブル180は、アドレス空間170および190がそれぞれロケーション160または165への「読み取り/書き込み」アクセスを有するように、メモリロケーション160および165のアクセス許可をマップする。同様に、ページテーブル180は、アドレス空間175または195についてのメモリロケーション160および165の許可を「読み取り/実行」としてそれぞれマップする。したがって、セキュリティ構成要素155(図1A)がユーザーモード113の構成要素から要求(たとえば、143)を受け取る場合、セキュリティ構成要素155は、要求(たとえば、143)を発生した構成要素のアドレス空間を、JITコンパイラの出力(たとえば、123)のアドレス空間に相互に関連付けることができる。」
(3)「【0040】
さらに、図2は、その方法が、第2アドレス空間で中間言語命令をコンパイルする動作220を含むことを示す。動作220は、第2アドレス空間で実行するJITコンパイラを使用して、1組または複数組の中間言語命令を新規にコンパイルされたコードにコンパイルすることを含む。たとえば、要求143の検証時に、セキュリティ構成要素155は、1つまたは複数の要求147を準備および実行して、要求された中間言語コードをJITコンパイラ105に渡す。JITコンパイラ105は、次いで、この図では共有メモリヒープ160への読み取り/書き込み許可を与えられている、第2アドレス空間170で中間言語コード120をコンパイルする。
【0041】
さらに、図2は、その方法が、コンパイルされたコードを共有メモリヒープに渡す動作230を含むことを示す。動作230は、新規にコンパイルされたコードを、アプリケーションプログラムが新規にコンパイルされたコードを第1アドレス空間に取得できる、共有メモリヒープに渡すことを含む。たとえば、図1Aおよび図1Bは、JITコンパイラ105およびアプリケーションプログラム110が、メモリヒープ160へのアクセスを有することを示す。特に、JITコンパイラ105は、メモリヒープ160に書き込める(しかしそこでの実行はできない)が、アプリケーションプログラム110は、メモリヒープ160からの読み取りおよび実行のみ可能である。したがって、JITコンパイラ105がコード123をコンパイルおよび作成する場合、アプリケーションプログラム110用のランタイムは、コンパイルされたコード123をアドレス空間175に取得でき、そのコードをユーザーモードで実行できる。」
(4)「【図1B】
[図:0001401443000005.jpg]
」

以上の(1)ないし(4)の特に下線部に着目すると、引用文献2には、次の技術事項(以下、「引用文献2記載事項」という。)が記載されているといえる。

「 アプリケーションプログラム110がより低い特権モード(たとえば、「ユーザー」モード)で実行され、一方JITコンパイラ105はより高い特権モード(たとえば、「カーネル」モード)で動作し、
メモリロケーション160は共有メモリヒープであり、メモリロケーション165は、アプリケーションプログラム110が実行のためにロードされるロケーションであり、
ページテーブル180は、アドレス空間170および190がそれぞれロケーション160または165への「読み取り/書き込み」アクセスを有するように、メモリロケーション160および165のアクセス許可をマップし、アドレス空間175または195についてのメモリロケーション160および165の許可を「読み取り/実行」としてそれぞれマップし、
JITコンパイラ105は、共有メモリヒープ160への読み取り/書き込み許可を与えられている、第2アドレス空間170で中間言語コード120をコンパイルし、JITコンパイラ105は、メモリヒープ160に書き込める(しかしそこでの実行はできない)が、アプリケーションプログラム110は、メモリヒープ160からの読み取りおよび実行のみ可能であり、JITコンパイラ105がコード123をコンパイルおよび作成する場合、アプリケーションプログラム110用のランタイムは、コンパイルされたコード123をアドレス空間175に取得でき、そのコードをユーザーモードで実行できる、こと。」

第5 当審の判断

1 対比

本願発明と引用発明を対比する。

(1)「ジャストインタイム」とは、“実行時”との意味であり、また、「コンパイル」とは、情報処理の技術分野においては、ソースコードから機械語のコードを生成することであるから、引用発明の「プログラムを実行時にコンパイルする方法」は、本願発明の「ジャストインタイム(JIT)でコードを生成する方法」に相当する。

また、引用発明において、「JavaVM101」は、「プロセッサ105」で実行されるものであるから、「JavaVM101」による処理は、「プロセッサ105」による処理に含まれる。

そして、引用発明の「プロセッサ105」は、本願発明の「少なくとも1つのハードウェアプロセッサ」に相当する。

よって、引用発明の「JavaVM101によりプログラムを実行時にコンパイルする方法」は、本願発明の「少なくとも1つのハードウェアプロセッサによって、ジャストインタイム(JIT)でコードを生成する方法」に相当する。

(2)引用発明の「JavaVM101は、バス103を通じてハードディスク102からJavaアプリケーション106を読み込み、動的コンパイラでコンパイルして実行し」及び「JavaVM101は、Javaアプリケーションの実行を担当するプロセス107と動的コンパイラ108の、2つのプロセスに分かれて動作し」との構成によれば、「動的コンパイラ108」は、「Javaアプリケーション106」を実行時(JIT)にコンパイルする機能を備え、また、「Javaアプリケーションの実行を担当するプロセス107」は、「動的コンパイラ108」によりコンパイルされた「Javaアプリケーション」を実行する機能を備え、かつ、「Javaアプリケーションの実行を担当するプロセス107」と「動的コンパイラ108」とは、互いに異なるプロセスといえる。

そして、引用発明の「Javaアプリケーションの実行を担当するプロセス107」及び「動的コンパイラ108」はそれぞれ、本願発明の「JIT実行プロセス」及び「JITコンパイルプロセス」に相当する。

以上から、引用発明は、本願発明の「JIT実行プロセスとJITコンパイルプロセスとは異なるプロセスであり」に相当する構成を備えているといえる。

(3)本願明細書の【0050】には、「共有メモリ204-1などの1つまたは複数の共有メモリ領域が、記憶装置204内に画定される、構築される、初期化される、等があり得る。例えば、共有メモリ204-1は、記憶装置204内の1つまたは複数のメモリページ、セクタ、等を利用することができる。共有メモリ204-1は、実行可能なコードセグメント222を格納するために使用されることがある。共有メモリ204-1は、異なるアクセス権を用いてプロセス210および212の各々にマッピングされることがある。」と記載されていることからすれば、本願発明における「共有メモリ」は、それ単独で独立した装置である必要はなく、記憶装置等の一部のメモリ領域である場合を含み、「実行可能なコードセグメント」を格納し、プロセスにアクセス権が設定されるものと認められる。

一方、引用発明の「それぞれのプロセスは共有メモリ領域109によって接続され」及び「共有メモリ領域109の中には、通信用領域110と、保護領域111があり」、「保護領域111には、動的コンパイラ108が生成したコンパイル済コード112や、コンパイル済コードのアドレス113を登録する表であるディスパッチ表114を配置し」、及び、「保護領域111はJavaアプリケーションの実行を担当するプロセス107から書込不可に指定される」との構成によれば、「保護領域111」は、「Javaアプリケーションの実行を担当するプロセス107」と「動的コンパイラ108」とに使用される「共有メモリ領域109」の一部のメモリ領域であり、「コンパイル済コード112」を格納し、さらに、「書込不可」等のアクセス権が設定されるものであるから、本願発明の「共有メモリ」に相当する。

よって、引用発明と、本願発明の「前記JIT実行プロセスと前記JITコンパイルプロセスは、単一の共有メモリを使用し」とは、「前記JIT実行プロセスと前記JITコンパイルプロセスは、共有メモリを使用し」という共通の構成を有しているといえる。

(4)引用発明の「保護領域111はJavaアプリケーションの実行を担当するプロセス107から書込不可に指定される」ことは、本願発明の「前記JIT実行プロセスは、前記共有メモリへの書込みアクセス権を持たず」との構成に相当する。

2 一致点、相違点

本願発明と引用発明は、以下の点において一致ないし相違する。

(1)一致点

「 少なくとも1つのハードウェアプロセッサによって、ジャストインタイム(JIT)でコードを生成する方法であって、
JIT実行プロセスとJITコンパイルプロセスとは異なるプロセスであり、前記JIT実行プロセスと前記JITコンパイルプロセスは、共有メモリを使用し、
前記JIT実行プロセスは、前記共有メモリへの書込みアクセス権を持たない、方法。」

(2)相違点

(相違点1)

一致点に含まれる「共有メモリ」が、本願発明においては、「単一の共有メモリ」であるのに対し、引用発明の「保護領域111」は、「単一の」ものであることを具体的に特定していない点。

(相違点2)

本願発明は、「前記JITコンパイルプロセスは、前記共有メモリからの実行アクセス権を持たない」との構成を備えるのに対し、引用発明において、「Javaアプリケーションの実行を担当するプロセス107」及び「動的コンパイラ108」のいずれについても、「保護領域111」からの実行アクセス権を有するか否かを具体的に特定していない点。

3 相違点についての判断

(1)相違点1について

引用文献1には、「保護領域111」が、複数存在していることは記載ないし示唆されておらず、また、引用文献1の【図1】及び【図3】(上記第4の1(3)及び(5))の記載からは、「保護領域111」が1つであることを見て取れる。

また、この技術分野(JITコンパイラ)において、引用文献1の「保護領域111」と同等のものが複数存在しなければならないことが本願優先日前における技術常識であるとも認められない。

さらに、本願発明における「単一のメモリ」に関し、「単一の」との語を付加する補正は、令和4年2月15日に提出された手続補正書によりなされたが、同日に提出された意見書において、当該補正の根拠は具体的に示されておらず、また、出願当初の明細書、特許請求の範囲及び図面には、「単一の共有メモリ」は明記されておらず、出願当初の【図2】及び【図3】に、「共有メモリ204-1」が1つある例が提示されているのみであるところ、本願発明において、「単一の共有メモリ」すなわち「共有メモリ」が1つのみであることに、格別な技術的意義はないと認められる。

したがって、引用発明における「保護領域111」は、本願発明の「単一の共有メモリ」に相当する場合を含むと理解できるから、相違点1は実質的なものではない。

(2)相違点2について

引用文献2記載事項にあるように、「JITコンパイラ105」は、コンパイル済のコードを「共有メモリヒープ160」に書き込めるが「そこでの実行はできない」ように制御すること、すなわち、JITコンパイラに、コンパイル済のコードを格納する共有メモリからの「実行アクセス権」を持たないようにアクセス権を設定することは、本願優先日前における公知技術である。

そして、引用発明において、「動的コンパイラ108」は、「コンパイル済コード112」を生成する機能を有するものであって、当該「コンパイル済コード112」を実行することは想定されていないことは明らかである。また、想定外の動作が、不正又は誤動作の原因となることは本願優先日前における技術常識であるところ、引用発明において、「動的コンパイラ108」が想定外の動作をすることを防止することは、引用発明における潜在的な課題といえる。そして、この課題を解決するために、引用文献2記載事項のうち、JITコンパイラに、コンパイル済のコードを格納する共有メモリからの「実行アクセス権」を持たないようにアクセス権を設定する、との技術事項を、引用発明の「動的コンパイラ108」の「保護領域111」に対するアクセス権の設定に適用し、上記相違点2に係る本願発明の構成とすることは、当業者が容易に想到し得たことである。

(3)作用効果について

上記相違点を総合的に勘案しても、本件補正発明の奏する作用効果は、引用発明及び引用文献2に記載された周知技術の奏する作用効果から予測される範囲内のものにすぎず、格別顕著なものということはできない。

(4)請求人の主張について

請求人は、審判請求書において

「 元の拒絶理由通知書の中で(拒絶査定の中でも)審査官殿は、

「引用文献1には、保護領域111について、動的コンパイラ108が実行アクセス権を与えられないことは記載されていない。
しかしながら、引用文献2の段落[0017]-[0047]には、JITコンパイラ105は、メモリヒープ160に書き込める(しかしそこでの実行はできない)こと(段落[0041])が記載されている。
引用文献1に記載された発明に引用文献2に記載された発明を適用し、動的コンパイラ108に保護領域111の実行アクセス権を与えないことは当業者であれば容易に想到し得たものである。」を述べられています。

これに対して、前回の意見書において、

<主張1>「先ず、引用文献2に記載の発明では、アプリケーションプログラムはオペレーティングシステムの「ユーザーモード」(低い特権モード)で実行し、一方、JITコンパイラはオペレーティングシステムの別のモード、すなわち「カーネルモード」(高い特権モード)で実行されています(引用文献2の明細書の段落「0025」参照)。これに対して、引用文献1に記載の発明ではオペレーティングシステムの2種類以上の実行モードは記載されていませんので、そのようなモードの遷移はありません。よって引用文献2に記載の発明を引用文献1に記載の発明に適用することはできません。」

<主張2>「また、引用文献2を参照すると、図1Bには、JITコンパイラ105から読み取り/書き込みでき、且つアプリーションプログラム110からは読み取りのみである「メモリロケーション165」と、JITコンパイラ105から読み取り/書き込みでき、且つアプリケーションプログラム110からは読み取り/実行できる「メモリヒープ160」という2種類のメモリが必要となります。

これに対して本願発明の場合は、JITコンパイラプロセル(当審注:原文ママ)及びJITコンパイラ実行プロセスが、共有メモリを使用している点で構成上顕著に相違します。

また、引用文献2に記載の発明では、JITコンパイラ105は、メモリヒープ160に対する読み取り/書き込み権が与えられている点、及び本願のポインタについて具体的な記載がない点でも、本願発明と異なります。

従って、引用文献1に記載された発明に引用文献2に記載された発明を適用したとしても、本願発明のような構成にはならず、当業者であってもこれらの引用文献の記載から本願発明に想到することは困難であると思料します。」

と主張したところ、拒絶査定において審査官殿から、

<主張1>に対して、

「上記主張は、「引用文献1に記載の発明ではオペレーティングシステムの2種類以上の実行モードは記載されていません」ことによって、なぜ「引用文献2に記載の発明を引用文献1に記載の発明に適用することはできません」となるのか不明である。
引用文献1にユーザーモード及びカーネルモードが記載されていないのは、引用文献1に記載された発明において、ユーザーモード及びカーネルモードの遷移は設計的事項であるからだと解される。例えば、引用文献1に記載された発明において、「Javaアプリケーションの実行を担当するプロセス107」及び「動的コンパイラ108」を実行するモードをいずれのモードとしたとしても、引用文献1に記載された発明がその目的に反するものとなるわけでもないし、引用文献1に記載された発明が機能しなくなるわけでもない。
そもそも、引用文献1にはJavaVM101がプロセッサ105で実行されること(段落[0012])が記載されているが、ユーザーモードとカーネルモードとを遷移しながらプロセスを実行するプロセッサは技術常識である。引用文献1に記載された発明のプロセッサ105が、ユーザーモードとカーネルモードとを遷移しながらプロセスを実行するものであることは、引用文献1に記載されているに等しい。
よって、上記主張は採用できない。」

と言われ、

<主張2>に対して、

「引用文献1には、保護領域111について、動的コンパイラ108が実行アクセス権を与えられないことは記載されていない。すなわち、引用文献1に記載された発明を実現するに当たって、保護領域111について動的コンパイラ108のアクセス権が設定されることは明らかであり、その際、実行アクセス権を与えるか、与えないかのどちらかに決定しなければならないことは明らかであるものの、そのどちらとするかが、引用文献1の記載からは必ずしも明らかではない。
引用文献2に「2種類のメモリ」が開示されている点、「JITコンパイラ105は、メモリヒープ160に対する読み取り/書き込み権が与えられている点、及び本願のポインタについて具体的な記載がない点」は、引用文献1に記載された発明において、動的コンパイラ108に実行アクセス権を与えるか、与えないかを、当業者が決定することができない理由にはならない。
よって、上記主張は採用できない。」

と言われております。

しかしながら、出願人の<主張1>の「引用文献1に記載の発明ではオペレーティングシステムの2種類以上の実行モードは記載されていませんので、そのようなモードの遷移はありません。」は審査官殿が認められる通り、引用文献1にはこのような記載がなく、これは事実であります。

したがって、引用文献1にはOSの複数のモードが記載されていないので、「引用文献1に記載された発明において、ユーザーモード及びカーネルモードの遷移は設計的事項である」と直ちに言うことはできないと思料いたします。

さらに、出願人の<主張2>の「引用文献2に記載の発明では、JITコンパイラ105は、メモリヒープ160に対する読み取り/書き込み権が与えられている点、及び本願のポインタについて具体的な記載がない点」については、審査官殿も認めておられるように事実であり、審査官殿が言われるような「引用文献2に「2種類のメモリ」が開示されている点、「JITコンパイラ105は、メモリヒープ160に対する読み取り/書き込み権が与えられている点、及び本願のポインタについて具体的な記載がない点」は、「引用文献1に記載された発明において、動的コンパイラ108に実行アクセス権を与えるか、与えないかを、当業者が決定することができない」こととは関係ありません。

このような状況ですので、そもそも引用文献1に引用文献2を適用すること自体が出願当時の技術常識を勘案しても技術的に無理があります。」

と主張する。

上記主張は、令和4年2月15日に提出された意見書における主張を参酌すれば、引用文献2の

(技術事項A)

アプリケーションプログラムは、オペレーティングシステムの「ユーザーモード」(低い特権モード)で実行し、一方、JITコンパイラは、オペレーティングシステムの別のモード、すなわち「カーネルモード」(高い特権モード)で実行されている点、

及び、

(技術事項B)

JITコンパイラから読み取り/書き込みができ、且つアプリケーションプログラム110からは読み取りのみである「メモリロケーション165」と、JITコンパイラからは読み取り/書き込みができ、且つアプリケーションプログラムからは読み取り/実行できる「メモリヒープ160」という2種類のメモリが必要になる点、

との2つの技術事項において、引用文献1に記載された発明とは前提となる構成が異なるため、引用文献1に記載された発明に、引用文献2に記載された、JITコンパイラに、コンパイル済のコードを格納する共有メモリからの「実行アクセス権」を持たないようにアクセス権を設定する、との技術事項(以下、「技術事項C」という。)を適用することには技術的な阻害要因がある、との趣旨と理解することができる。

しかしながら、主たる引用発明に、他の引用文献に記載された技術事項を適用するにあたり、当該他の引用文献に記載された技術事項のすべてを適用する必要はなく、引用発明における問題又は課題を解決したり、あるいは、引用発明が対象とする物や方法の機能又は性能を向上させたりするために必要な技術事項のみを適用すれば足りるところ、引用発明の「動的コンパイラ108」が想定外の動作をすることを防止することを目的として、引用発明の「保護領域111」に対する「動的コンパイラ108」のアクセス権の設定に、技術事項Cのみを適用しようとすることには合理性がある。

加えて、引用文献2には、技術事項Cと技術事項A又は技術事項Bとの間の技術的な因果関係(例えば、技術事項A又はBのために技術事項Cを採用しているといった事情等)については何ら記載がなく、よって、引用発明が、技術事項A又は技術事項B又はこれらに対応する構成を備えないことは、引用発明に技術事項Cを適用することができない理由にはならない。

また、技術事項Bについては、引用文献2に記載の「メモリロケーション165」は、「アプリケーションプログラム110が実行のためにロードされるロケーション」であり、引用発明の「JavaVMによりプログラムを実行時にコンパイルする方法」とはそもそも無関係である。

加えて、引用文献1の【0017】には「すなわち、処理301は、従来の処理401とは異なり、動的コンパイラが参照しうる領域を、ただのヒープ領域402ではなく、共有メモリ領域109として確保する。」と記載され、また、当該記載に関し、引用発明に関する【図3】及び引用文献1における従来技術を示す【図4】とを参酌すれば、引用発明の「共有メモリ領域109」は、従来技術における「ヒープ領域402」のうち、「コンパイル済コードやそのアドレスを記憶する」領域を、プロセス毎にアクセスを制限することが可能な「保護領域111」として設定したものにすぎず、当該「保護領域111」も、実質的には、「ヒープ領域」(ヒープメモリ)の一部であるから、引用文献2記載事項の「共有ヒープメモリ160」と何ら変わるところはない。

したがって、請求人が主張するような技術的な阻害要因は存在しないから、請求人による上記主張は採用しない。

第6 むすび

以上のとおり、本願発明は、引用文献1及び2に記載された発明に基いて、当業者が容易に発明をすることができたものであるから、特許法29条2項の規定により特許を受けることができない。

したがって、他の請求項に係る発明について検討するまでもなく、本願は拒絶すべきものである。

よって、結論のとおり審決する。

審決本文(J-PlatPat)

J-PlatPatの審決検索トップを開きます。番号入力で「審判番号」を選び、下の番号を貼り付けて検索してください。

J-PlatPat 審決検索を開く
2022-018106

番号・当事者・条文・審決分類・商標の称呼が一致(または近い)審決を機械的に集めた候補です。判断内容は各審決の本文でご確認ください。

同じ論点・分野の審決(審決分類)2,453件(121・G06F)
  • 2025-005007拒絶査定不服審判 / 2026-08-19 / 原査定取消(特許/登録すべき)共有レコードのクライアント更新にルールの適用によるシステム生成更新のトリガ
    共通の審決分類: 121・G06F
  • 2024-009005拒絶査定不服審判 / 2026-08-18 / 原査定取消(特許/登録すべき)モジュール式空気冷却および分配システムおよび方法
    共通の審決分類: 121・G06F
  • 2025-008882拒絶査定不服審判 / 2026-08-18 / 原査定取消(特許/登録すべき)情報処理装置、認証器、それら方法およびプログラム
    共通の審決分類: 121・G06F
  • 2025-007124拒絶査定不服審判 / 2026-08-18 / 原査定取消(特許/登録すべき)記憶装置
    共通の審決分類: 121・G06F
  • 2025-014602拒絶査定不服審判 / 2026-08-13 / 原査定取消(特許/登録すべき)ペン入力装置用カバー部材、及びペン入力装置
    共通の審決分類: 121・G06F

メモ・タグ(非公開)

あなただけに表示されます。審決本文の公開範囲は変わりません。

メモとタグは Pro の機能です。ログイン/Proでメモを保存