KR101557211B1 - 소프트웨어 애플리케이션 전달 및 개시 시스템 - Google Patents

소프트웨어 애플리케이션 전달 및 개시 시스템 Download PDF

Info

Publication number
KR101557211B1
KR101557211B1 KR1020137024462A KR20137024462A KR101557211B1 KR 101557211 B1 KR101557211 B1 KR 101557211B1 KR 1020137024462 A KR1020137024462 A KR 1020137024462A KR 20137024462 A KR20137024462 A KR 20137024462A KR 101557211 B1 KR101557211 B1 KR 101557211B1
Authority
KR
South Korea
Prior art keywords
software
executable code
computing device
virtual memory
client
Prior art date
Application number
KR1020137024462A
Other languages
English (en)
Other versions
KR20130124974A (ko
Inventor
줄리언 마이클 어바크
Original Assignee
줄리언 마이클 어바크
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 줄리언 마이클 어바크 filed Critical 줄리언 마이클 어바크
Publication of KR20130124974A publication Critical patent/KR20130124974A/ko
Application granted granted Critical
Publication of KR101557211B1 publication Critical patent/KR101557211B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44573Execute-in-place [XIP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44584Portable applications, i.e. making applications self-contained, e.g. U3 standard
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Abstract

일 실시예는 제1 가상 메모리를 할당하고; 제1 소프트웨어 물품의 실행 가능한 코드를 수신하고; 제1 소프트웨어 물품의 실행 가능한 코드를 제1 가상 메모리에 직접 기록하고; 제1 가상 메모리를 실행 가능하다고 표시하며; 제1 가상 메모리로부터 직접 제1 소프트웨어 물품의 실행 가능한 코드를 실행하고; 제1 소프트웨어 물품의 실행 가능한 코드에 의해 용이하게 된 제2 소프트웨어 물품의 실행 가능한 코드를 다운로드 및 실행한다.

Description

소프트웨어 애플리케이션 전달 및 개시 시스템{SOFTWARE APPLICATION DELIVERY AND LAUNCHING SYSTEM}
본 발명은 일반적으로 컴퓨터 네트워크를 통한 컴퓨터 소프트웨어의 분배에 관한 것으로, 특히, 클라이언트에 소프트웨어의 어떤 부분도 설치하지 않고 클라이언트에서의 실행을 위해 컴퓨터 네트워크를 통해 서버로부터 클라이언트로 컴퓨터 소프트웨어를 전개하는 것에 관한 것이다.
컴퓨터 소프트웨어는 각종 방법들로 개별 컴퓨터 시스템들에 분배될 수 있다. 예를 들어, 소프트웨어 물품(a piece of software)이 콤팩트 디스크(CD) 또는 디지털 다기능 디스크(DVD)에 저장될 수 있다. 한 사람이 컴퓨터 시스템의 디스크 드라이브에 이러한 디스크를 넣어 디스크에 저장된 소프트웨어 물품을 컴퓨터 시스템에 설치할 수 있다. 더 최근에, 컴퓨터 네트워크들은 소프트웨어 분배를 위한 다른 채널을 제공한다. 한 사람이 소프트웨어 물품을 원격 컴퓨터 시스템(예를 들어, 서버)으로부터 컴퓨터 네트워크(예를 들어, 인터넷)를 통해 자신의 컴퓨터 시스템(예를 들어, 클라이언트)에 다운로드할 수 있다. 종종, 네트워크를 통해 다운로드된 파일은 소프트웨어 물품이 포함(embed)되어 있는 설치 세트, 스크립트, 또는 실행 파일(executable)일 수 있다. 그 사람은 자신의 컴퓨터 시스템의 하드 드라이브에서, 영구적인 로케이션에 또는 임시 디렉토리에, 다운로드된 파일을 저장할 수 있으며, 자신의 컴퓨터 시스템에 소프트웨어 물품을 설치하기 위해 저장된 파일을 실행할 수 있다.
본 발명은 일반적으로 컴퓨터 네트워크를 통한 컴퓨터 소프트웨어의 분배에 관한 것으로, 특히, 클라이언트에 소프트웨어의 어떤 부분도 설치하지 않고 클라이언트에서의 실행을 위해 컴퓨터 네트워크를 통해 서버로부터 클라이언트로 컴퓨터 소프트웨어를 전개하는 것에 관한 것이다.
특정 실시예들은 제1 가상 메모리를 할당하고; 제1 소프트웨어 물품의 실행 가능한 코드를 수신하며; 제1 소프트웨어 물품의 실행 가능한 코드를 제1 가상 메모리에 직접 기록하고; 제1 가상 메모리를 실행 가능하다고 표시하며; 제1 가상 메모리로부터 직접 제1 소프트웨어 물품의 실행 가능한 코드를 실행하고; 제1 소프트웨어 물품의 실행 가능한 코드에 의해 용이하게 된 제2 소프트웨어 물품의 실행 가능한 코드를 다운로드 및 실행한다.
본 발명의 이들 및 여타 특징들, 양상들, 및 장점들은 이하의 도면들과 관련하여 상세한 설명에 더 상세히 후술된다.
도 1은 클라이언트에 소프트웨어의 어떤 부분도 설치하지 않고 클라이언트에서의 실행을 위해 서버로부터 클라이언트로 컴퓨터 소프트웨어 물품을 전개하는 일례의 방법을 도시한다.
도 2는 클라이언트에서의 실행을 위해 서버로부터 클라이언트로 컴퓨터 소프트웨어 물품을 스트리밍하는 일례의 방법을 도시한다.
도 3은 일례의 네트워크 환경을 도시한다.
도 4는 일례의 컴퓨터 시스템을 도시한다.
본 발명은 첨부 도면들에 도시된 소수의 실시예들을 참조해서 이제 상세히 기술된다. 이하의 설명에서, 다수의 특정 세부 사항들은 본 발명의 철저한 이해를 제공하기 위해 기재된다. 그러나, 본 발명은 이러한 특정 세부 사항들 중 일부 또는 전부 없이 실시될 수 있음이 당업자에게 명백하다. 다른 실례들에서, 널리 공지된 프로세스 단계들 및/또는 구조들은 본 발명을 불필요하게 모호하게 하지 않기 위해 상세히 기술되지 않았다. 또한, 본 발명이 특정 실시예들과 관련해서 기술되지만, 본 설명은 기술된 실시예들로 본 발명을 제한하도록 의도된 것이 아님을 알아야만 한다. 대조적으로, 본 설명은 첨부된 청구항들에 의해 정의된 본 발명의 원리 및 범위 내에 포함될 수 있는 대안들, 수정들, 및 동등물들을 포함하도록 의도된 것이다.
컴퓨터 소프트웨어는 한 컴퓨터 시스템(예를 들어, 서버)로부터 다른 컴퓨터 시스템(예를 들어, 클라이언트)으로 컴퓨터 네트워크(예를 들어, 인터넷)를 통해 분배될 수 있다. 사실, 점점 더 많은 수의 소프트웨어 개발자들, 제조자들, 및 분배자들이 컴퓨터 네트워크들을 소프트웨어 분배를 위한 편리하고 빠르고 비용-효율적인 채널로서 생각한다. 예를 들어, 한 사람이 종종 회사의 웹사이트로부터 회사에 의해 개발된 컴퓨터 소프트웨어 물품의 최신 버전을 다운로드할 수 있다. 전형적인 시나리오에서, 그 사람은 자신의 컴퓨터 시스템에서 실행되는 웹 브라우저에 그 소프트웨어 물품으로의 다운로드 링크를 포함하는 웹 페이지를 로드한 후, 웹 페이지에 제공된 그 다운로드 링크를 클릭할 수 있다. 이는 통상 파일이 그 사람의 컴퓨터 시스템에 다운로드되게 한다. 그 파일은 설치 스크립트 또는 실행 파일 또는 소프트웨어 자체의 실행 가능한 코드일 수 있다. 그 사람은 자신의 컴퓨터 시스템의 하드 드라이브에 파일을 저장할 수 있다. 그 파일이 설치 스크립트 또는 실행 파일이라면, 그 사람은 다운로드된 파일을 실행하여 자신의 컴퓨터 시스템에 소프트웨어를 설치할 수 있다. 한편, 파일이 소프트웨어의 실행 가능한 코드이면, 사람은 (예를 들어, 실행 가능한 파일을 더블 클릭함으로써) 소프트웨어를 직접 실행할 수 있다.
프로그램들을 실행하기 위해 컴퓨터 시스템의 하드 드라이브에 컴퓨터 네트워크들을 통해 다운로드된 소프트웨어 프로그램들을 저장 또는 설치해야만 하는 것은 가끔은 불편하거나 번거로울 수 있다. 예를 들어, 먼저, 다운로드된 파일들을 하드 드라이브에 저장하고 소프트웨어를 컴퓨터 시스템에 설치하는 것은 종종 시간이 걸린다. 게다가, 소프트웨어 물품이 크기가 크면(예를 들어, Adobe® PDF Reader®), 설치 프로세스는 상당한 양의 시간이 걸릴 수 있다. 컴퓨터 시스템의 사용자는 다운로드된 소프트웨어를 실행할 수 있기 전에 수 개의 단계들(예를 들어, 설치, 셋업 등)을 성사해야만 할 수 있다. 둘째로, 파일들을 하드 드라이브에 저장하고 소프트웨어를 컴퓨터 시스템에 설치하는 것은 컴퓨터 시스템의 기억 용량(예를 들어, 하드 드라이브 공간)을 다 써버린다. 때때로, 컴퓨터 시스템(예를 들어, 넷북 또는 노트북 컴퓨터)은 사용자가 컴퓨터 시스템에 설치하기를 희망하는 모든 소프트웨어를 위한 충분한 기억 공간을 갖지 않을 수 있다. 셋째로, 소프트웨어 개발자들은 소프트웨어를 갱신하고 가끔 더 새로운 버전들의 소프트웨어를 발표한다. 소프트웨어 물품의 더 새로운 버전들은 통상 더 오래된 버전들보다 더 나은 품질이다. 따라서, 사람들은 소프트웨어를 비교적 최신으로 유지하기를 희망할 수 있다. 그러나, 소프트웨어 물품을 갱신하기 위해, 사람은 종종 자신의 컴퓨터 시스템에 현재 설치되어 있는 더 오래된 버전의 소프트웨어를 삭제한 후에, 더 새로운 버전을 다운로드 및 설치할 필요가 있다. 또한, 일부 소프트웨어 개발자들은 이러한 설치들을 필요로 하지 않는 소프트웨어 기반 애플리케이션 서비스들을 사용자들에게 전달하기를 원할 수 있는데, 그 이유는 사용자들이 임의의 다운로드된 코드가 초기 사용 또는 임의의 다음 사용 후에 영구적인 데이터 기억 디바이스들에 남는 것을 피하고 싶을 것이기 때문이다.
이러한 문제들 중 일부를 다루기 위해, 특정 실시예들은 한 컴퓨터 시스템(예를 들어, 클라이언트)의 사용자가 사용자의 컴퓨터 시스템의 임의의 영구적인 기억 장치(예를 들어, 하드 드라이브)에 소프트웨어 프로그램들 또는 임의의 다른 타입들의 소프트웨어를 저장 또는 설치할 필요 없이 사용자의 컴퓨터 시스템에서의 실행을 위해 컴퓨터 네트워크(예를 들어, 인터넷)를 통해 다른 컴퓨터 시스템(예를 들어, 서버)로부터 컴퓨터 소프트웨어 프로그램들을 다운로드할 수 있게 한다. 다시 말해서, 사용자는 소프트웨어 물품을 자신의 컴퓨터 시스템에 다운로드하고 자신의 컴퓨터 시스템에서 그 소프트웨어 물품을 실행할 수 있다. 소프트웨어의 실행이 완료된 후에(예를 들어, 사용자가 소프트웨어를 종료한 후에), 사용자의 컴퓨터 시스템에는 그 소프트웨어 또는 어떤 다른 관련 소프트웨어의 흔적도 남지 않는다.
설명(clarification)을 위해, 이후로, 소프트웨어가 다운로드되고 소프트웨어가 실행되는 컴퓨터 시스템을 "클라이언트"라고 하고, 다운로드되는 소프트웨어의 출처인 컴퓨터 시스템을 "서버"라고 한다. 그러나, 더 상세히 후술되는 실시예들은 임의의 2개의 컴퓨터 시스템들(예를 들어, 2개의 서버들, 2개의 클라이언트들, 또는 서버 및 클라이언트)에 적합하게 적용될 수 있음을 당업자는 알 수 있다. 또한, 서버로부터 클라이언트에 다운로드되고 클라이언트에서 실행되는 소프트웨어 물품(즉, 사람이 사용하기를 원하는 소프트웨어)을 목표 소프트웨어라고 한다.
특정 실시예들에서, 이후로 "스터브(stub) 소프트웨어" 또는 간단히 "스터브"라고 하는, 다른 소프트웨어 물품이 목표 소프트웨어의 다운로드 및 실행을 용이하게 할 수 있다. 특정 실시예들에서, 스터브는 임의의 적합한 프로그래밍 언어를 사용해서 구현되고 컴퓨터 실행 가능한 코드로서 컴파일링될 수 있다. 특정 실시예들에서, 스터브의 실행 가능한 코드는 서버에 저장될 수 있으며, 예를 들어, 제한 없이, 웹 브라우저에서 실행될 수 있는, 자바(Java), 자바스크립트(JavaScript), 파이썬(Python) 등의 임의의 적합한 프로그래밍 언어로 기록된 클라이언트-측 스크립트를 사용한 실행을 위해 클라이언트에 다운로드될 수 있다. 예를 들어, 클라이언트-측 스크립트는 클릭 가능한 링크로서 웹 페이지에 포함될 수 있다. 클라이언트-측 스크립트에 액세스하기 위해, 사용자는 클라이언트에 상주하는 웹 브라우저(예를 들어, 마이크로소프트 인터넷 익스플로러(Microsoft Internet Explorer), 모질라 파이어폭스(Mozilla Firefox), 또는 구글 크롬(Google Chrome))에 클라이언트-측 스크립트를 포함하는 웹 페이지를 로드한 후, 웹 페이지에 제공된 클라이언트-측 스크립트로의 링크를 클릭할 수 있다. 이는 클라이언트-측 스크립트 코드가 웹 브라우저에 의한 실행을 위해 웹 브라우저에 송신되게 한다.
도 1은 스터브의 사용을 통한 클라이언트에서의 실행을 위해 서버로부터 클라이언트로 목표 소프트웨어를 전개하는 일례의 방법을 도시한다. 특정 실시예들에서, 클라이언트-측 스크립트가 웹 브라우저에서 실행되면, 단계(100)에 도시된 바와 같이, 스크립트는 클라이언트에 상주하는 외부 함수(foreign function) 라이브러리에 액세스한다. 다수의 프로그래밍 언어들이 외부 함수 인터페이스들을 제공한다. 외부 함수 인터페이스는, 한 프로그래밍 언어로 기록된 소프트웨어 프로그램이 루틴들을 호출하거나 다른 프로그래밍 언어로 기록된 서비스들(예를 들어, 운영 체제 또는 소프트웨어 라이브러리에 의해 제공된 함수들)을 사용할 수 있게 해주는 메커니즘이다. 통상, 프로그래밍 언어의 외부 함수 인터페이스를 구현하는 함수들은 해당 프로그래밍 언어에 의해 제공된 외부 함수 라이브러리에 포함된다. 예를 들어, 파이썬은 "ctypes package"라고 하는 외부 함수 라이브러리를 제공하고; 자바는 자바 프로그램들이 네이티브 공유 라이브러리들에 액세스할 수 있게 해주는 자바 네이티브 인터페이스(Java Native Interface) 및 자바 네이티브 액세스(Java Native Access)를 제공하며; 자바스크립트는 자바스크립트 외부 함수 인터페이스(JSFFI)라고도 하는 자바스크립트 네이티브 인터페이스(JSNI)를 제공한다. 일부 웹 브라우저들(예를 들어, 모질라 파이어폭스)도 이러한 웹 브라우저들에서 실행중인 코드를 위한 네이티브 또는 외부 함수 액세스를 지원한다.
스크립트 코드가 작성된 특정 프로그래밍 언어에 따라, 스크립트는 해당 프로그래밍 언어의 대응 외부 함수 라이브러리를 불러올 수 있다. 예를 들어, 파이썬의 경우, 특정 라이브러리를 로드하는 데 사용될 수 있는 "load_library"라고 하는 함수가 있다. 마이크로소프트 윈도(Microsoft Windows)는 명시된 모듈을 호출 프로세스의 어드레스 공간에 로드하기 위해 "LoadLibrary"라고 하는 함수를 제공한다.
특정 실시예들에서, 적합한 외부 함수 인터페이스를 통해, 단계(102)에 도시된 바와 같이, 스크립트는 클라이언트에 상주하는 메모리 할당 함수로의 포인터를 획득할 수 있다. 클라이언트에서 유효한 특정 메모리 할당 함수는 클라이언트의 운영 체제 또는 클라이언트에서 유효한 소프트웨어 라이브러리들에 의존할 수 있다. 예를 들어, 마이크로소프트 윈도는 호출 프로세스의 가상 어드레스 공간의 페이지들의 영역을 예약 또는 커밋하기 위해 "VirtualAlloc"라고 하는 함수를 제공한다. C 및 C++ 프로그래밍 언어들은 둘 다 명시된 크기의 동적 메모리 할당을 실행하기 위해 "malloc"라고 하는 라이브러리 함수를 제공한다.
특정 실시예들에서, 단계(104)에 도시된 바와 같이, 메모리 할당 함수(예를 들어, "VirtualAlloc")를 사용해서, 스크립트는 특정한 양의 메모리를 할당할 수 있다. 할당된 메모리는 스터브의 실행 가능한 코드를 위해 충분해야만 한다. 특정 실시예들에서, 단계(106)에 도시된 바와 같이, 스터브의 실행 가능한 코드는 서버로부터 다운로드되어 할당된 메모리에 기록될 수 있다. 특정 실시예들에서, 스터브는 각종 공유 라이브러리들에 포함된 일부 라이브러리 함수들을 요구할 수 있다. 예를 들어, 마이크로소프트 윈도의 경우, 공유 라이브러리들은 동적-링크 라이브러리들(DLL들)이라고 한다. 스터브에 의해 요구되는 함수들을 포함하는 공유 라이브러리들은 적합한 라이브러리 로드 함수(예를 들어, "LoadLibrary" 또는 "load_library")를 사용해서 로드될 수 있다.
특정 실시예들에서, 스터브의 실행 가능한 코드가 기록된 메모리는 실행 가능한 메모리로서 표시된다. 예를 들어, 마이크로소프트 윈도는, 악성 코드 착취로부터의 보호를 돕기 위해 메모리에 대한 추가 검사들을 실행하는 하드웨어 및 소프트웨어 기술들의 집합인, 데이터 실행 방지(DEP)라고 하는 메커니즘을 제공한다. 간략하게 말해서, 로케이션이 명확하게 실행 가능한 코드를 포함하지 않는 한, 프로세스의 모든 메모리 로케이션들은 실행 가능하지 않다고 표시된다. 따라서, 스터브의 실행 가능한 코드가 기록된 메모리 로케이션들은 스터브 코드가 실행되기 위해서는 실행 가능하다고 표시될 필요가 있다. 마이크로소프트 윈도의 경우, 특정 메모리 로케이션들은 적합한 플래그 또는 속성을 설정함으로써 실행 가능하다고 표시될 수 있다(예를 들어, 할당된 메모리를 "PAGE_EXECUTE", "PAGE_EXECUTE_READ", "PAGE_EXECUTE_READWRITE", 또는 "PAGE_EXECUTE_WRITECOPY"로 표시함).
특정 실시예들에서, 단계(110)에 도시된 바와 같이, 할당된 메모리 내의 스터브의 실행 가능한 코드로의 포인터를 획득할 수 있다. 특정 실시예들에서, 단계(112)에 도시된 바와 같이, 스터브의 실행 가능한 코드는 메모리로부터 직접 개시될 수 있다. 특정 실시예들에서, 단계(114)에 도시된 바와 같이, 스터브는 클라이언트에서의 목표 소프트웨어의 다운로드 및 실행을 용이하게 할 수 있다. 이 프로세스는 도 2와 관련하여 더 상세히 후술된다.
특정 실시예들에서, 스터브가 태스크들(즉, 클라이언트에서의 목표 소프트웨어의 다운로드 및 실행을 용이하게 함)을 완료한 후에, 단계(116)에 도시된 바와 같이, 다시 적합한 외부 함수 인터페이스를 통해, 스크립트는 클라이언트에 상주하는 메모리 할당 해제 함수로의 포인터를 획득할 수 있다. 클라이언트에서 유효한 특정 메모리 할당 해제 함수는 클라이언트의 운영 체제 또는 클라이언트에서 유효한 소프트웨어 라이브러리들에 의존할 수 있다. 예를 들어, 마이크로소프트 윈도는 호출 프로세스의 가상 어드레스 공간 내의 페이지들의 영역을 해제, 디커밋(de-committing), 또는 해제 및 디커밋하기 위해 "VirtualFree"라고 하는 함수를 제공한다. C 및 C++ 프로그래밍 언어들은 둘 다 할당된 동적 메모리를 해방(즉, 할당 해제)하기 위해 "dealloc" 및 "free" 등의 라이브러리 함수들을 제공한다.
특정 실시예들에서, 메모리 할당 해제 함수(예를 들어, "VirtualFree")를 사용해서, 단계(118)에 도시된 바와 같이, 스크립트는 스터브의 실행 가능한 코드가 기록된 메모리를 할당 해제할 수 있다. 그 후, 이 메모리 공간은 다른 목적들을 위해 사용될 수 있으며, 다른 데이터가 동일한 메모리 공간에 로드되어서, 스터브의 실행 가능한 코드를 무효화(override)할 수 있다. 따라서, 스터브의 실행 가능한 코드가 기록된 메모리 로케이션들이 해방(즉, 할당 해제)된 후에, 스터브의 실행 가능한 코드는 클라이언트로부터 사라진다(예를 들어, 대체 또는 제거됨). 스터브가 클라이언트의 어떠한 영구적인 기억 장소(예를 들어, 하드 드라이브)에도 저장되거나 설치되지 않기 때문에, 스터브의 실행 가능한 코드의 흔적이 클라이언트에 남지 않는다.
특정 실시예들에서, 스터브의 실행 가능한 코드가 기록된 메모리 로케이션들을 명확하게 할당 해제하는 대신, 메모리 로케이션들은 암암리에 해방될 수 있다. 예를 들어, 사용자가 웹 브라우저를 종료하거나 또는 클라이언트-측 스크립트를 포함하는 웹 페이지를 빠져나오면, 스크립트와 연관된 모든 메모리 로케이션들은 해방되며, 이는 스터브의 실행 가능한 코드가 기록된 메모리 로케이션들도 해방됨을 의미한다.
특정 실시예들에서, 클라이언트에서 할당된 메모리로부터 직접 실행되면, 스터브는 목표 소프트웨어의 다운로드 및 실행을 용이하게 한다. 특정 실시예들에서, 스터브는 목표 소프트웨어가 저장된 서버와 클라이언트 간의 네트워크 연결을 설정하고, 이 네트워크 연결을 통해 서버로부터 클라이언트로 목표 소프트웨어의 실행 가능한 코드를 다운로드할 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 네트워크 연결을 통해 서버로부터 클라이언트로 송신된 데이터 스트림에 포함될 수 있다. 데이터 스트림을 수신할 때, 스터브는 목표 소프트웨어의 실행 가능한 코드를 추출하여, 이를 클라이언트에서의 실행을 위해 클라이언트의 랜덤-액세스 메모리(RAM)에 직접 로드할 수 있다. 목표 소프트웨어는, 스터브와 동일하게, 클라이언트의 어떠한 영구적인 기억 장소(예를 들어, 하드 드라이브)에도 저장되거나 설치되지 않는다. 목표 소프트웨어가 클라이언트에서의 실행을 완료하면, 목표 소프트웨어의 실행 가능한 코드가 로드된 RAM 공간은 해제될 수 있으며, 목표 소프트웨어는 더 이상 클라이언트의 어느 곳에도 존재하지 않는다.
목표 소프트웨어는 클라이언트에 저장되거나 설치될 필요 없이 클라이언트에서 다운로드 및 개시될 수 있어서, 클라이언트의 기억 용량의 사용을 감소시킬 수 있다. 게다가, 목표 소프트웨어가 클라이언트에서의 실행 바로 전에 다운로드되기 때문에, 목표 소프트웨어가 다운로드 및 개시될 때마다, 최신의 또는 임의의 희망 버전의 목표 소프트웨어가 획득될 수 있다.
도 2는 스터브가 클라이언트에서의 목표 소프트웨어의 다운로드 및 실행을 용이하게 하는 일례의 방법을 도시한다. 특정 실시예들에서, 다운로드되는 목표 소프트웨어는 애플리케이션 프로그램이다. 목표 소프트웨어의 실행 가능한 코드는 서버에 저장될 수 있으며, 이 서버는 스터브의 실행 가능한 코드가 저장된 서버와 동일한 서버이거나 또는 상이한 서버일 수 있다.
특정 실시예들에서, 단계(200)에 도시된 바와 같이, 스터브는 목표 소프트웨어의 실행 가능한 코드가 저장된 서버와 클라이언트 간의 네트워크 연결을 설정할 수 있다. 스터브는 서버와 클라이언트 간에 이미 설정된 기존 연결(예를 들어, 웹 브라우저에 의해 설정된 연결)을 인계받거나, 또는 새로운 연결을 설정할 수 있다. 스터브가 새로운 네트워크 연결을 설정하면, 이 새로운 연결은 컴퓨터 네트워크에 연결된 2개의 컴퓨터 시스템들 간의 임의의 적합한 핸드셰이킹 방법들을 사용해서 설정될 수 있다. 예를 들어, 클라이언트에서 실행중인 스터브는 서버에 연결 요청을 송신할 수 있으며, 서버는, 연결 요청을 수신할 때, 연결 요청이 수락되었는지 또는 거부되었는지를 나타내는 응답을 회신할 수 있다. 서버가 연결 요청을 수락했으면, 따라서, 네트워크 연결이 클라이언트와 서버 간에 설정될 수 있다. 특정 실시예들에서, 서버와 클라이언트 간의 통신은, 예를 들어, 제한 없이, HTTP(Hypertext Transfer Protocol), UDP(User Datagram Protocol), 또는 TCP(Transport Control Protocol) 등의 임의의 적합한 통신 프로토콜을 사용할 수 있다.
특정 실시예들에서, 개별 클라이언트들에 다운로드될 수 있는, 서버에 저장된 다수의 소프트웨어 프로그램들이 있거나 또는 서버에 저장된 특정 소프트웨어 프로그램의 다수의 버전들이 있을 수 있다. 특정 실시예들에서, 클라이언트에서 실행중인 스터브에 의해 서버로부터 클라이언트로 다운로드될 수 있는 각각의 버전의 각각의 소프트웨어 물품은 고유한 식별자에 의해 식별될 수 있다. 이 고유한 식별자는 어떤 특정 소프트웨어 물품을 클라이언트의 스터브가 다운로드하기 원하는지를 서버에 통지하는 데 사용될 수 있다. 특정 실시예들에서, 각각의 다운로드 가능한 소프트웨어 물품은 네트워크 리소스라고 간주될 수 있다. 따라서, 특정한 다운로드 가능한 소프트웨어 물품은 그의 고유한 네트워크 경로 또는 URI(Uniform Resource Identifier)에 의해 식별될 수 있다. 스터브는 URI를 사용해서 목표 소프트웨어를 참조할 수 있다.
때때로, 소프트웨어 물품은 다수의 버전들을 가질 수 있다. 특정 실시예들에서, 스터브는 클라이언트에 대한 가장 적합한 버전의 목표 소프트웨어를 결정할 수 있다. 예를 들어, 다수의 버전들의 마이크로소프트 윈도 운영 체제들(예를 들어, 윈도 XP, 윈도 ME, 또는 윈도 7)뿐만 아니라 32-비트 운영 체제들 및 64-비트 운영 체제들이 있다. 스터브는 클라이언트의 운영 체제와 가장 호환성 있는 목표 소프트웨어의 특정 버전을 결정하기 위해 클라이언트의 운영 체제를 검사할 수 있다. 클라이언트의 운영 체제가 32-비트 운영 체제이면, 스터브는 목표 소프트웨어의 32-비트 버전을 식별할 수 있다. 한편, 클라이언트의 운영 체제가 64-비트 운영 체제이면, 스터브는 목표 소프트웨어의 64-비트 버전을 식별할 수 있다.
특정 실시예들에서, 목표 소프트웨어가 저장된 특정 서버와의 네트워크 연결을 요청할 때, 스터브는 연결 요청과 함께 또는 연결 요청의 일부로서 목표 소프트웨어의 고유한 식별자를 서버에 송신할 수 있다. 대안으로, 특정 실시예들에서, 서버와 클라이언트 간의 연결이 설정된 후에 스터브는 개별 요청으로서 목표 소프트웨어의 식별자를 서버에 송신할 수 있다. 그 후, 서버는 어떤 특정 소프트웨어 물품을 요청 클라이언트에 송신해야만 하는지를 결정할 수 있다. 이 프로세스는 (예를 들어, 웹 페이지에 포함된 다운로드 가능한 파일로의 URL 또는 URI 링크를 클릭함으로써) 웹 브라우저를 통해 데이터 스트림을 호출하는 것과 유사할 수 있다.
특정 실시예들에서, 단계(202)에 도시된 바와 같이, 서버는, 네트워크 연결을 통해, 요청 클라이언트에, 및 더 구체적으로는, 요청 클라이언트에서 실행중인 스터브에, 데이터 스트림을 송신할 수 있다. 네트워크 연결은 TCP 연결, UDP 연결, HTTP 연결, 또는 임의의 다른 적합한 연결일 수 있다. 특정 실시예들에서, 데이터 스트림은 비디오 스트림 또는 오디오 스트림일 수 있다. 특정 실시예들에서, 스터브에 의해 요청된 목표 소프트웨어의 실행 가능한 코드는 하나의 또는 그 이상의 데이터 패킷들로서 데이터 스트림에 포함될 수 있다. 예를 들어, 목표 소프트웨어는 비디오 코덱에 의해 인코딩된 비디오 스트림을 수신하고, 그 데이터를 디코딩하여, 클라이언트의 디스플레이에 비디오 데이터를 렌더링하는 비디오 디코더일 수 있다. 다른 일례로서, 목표 소프트웨어는 컴퓨터 게임일 수 있다.
특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 데이터 스트림에 포함될 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 기계 코드 또는 원시 코드일 수 있으며, 플랫폼-종속적일 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 목표 소프트웨어를 요청하는 특정 클라이언트의 플랫폼에서 실행하기 위해 컴파일링되었다(예를 들어, 그 클라이언트의 하드웨어 아키텍처 및 운영 체제에 기초하여).
특정 실시예들에서, 데이터 스트림은 2개의 부분들을 포함할 수 있다. 특정 실시예들에서, 데이터 스트림의 제1 부분(즉, 데이터 스트림의 초반부)은 목표 소프트웨어의 실행 가능한 코드를 포함할 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 선택적으로 임의의 적합한 압축 방법들을 사용해서 압축될 수 있다. 예를 들어, 집(zip) 또는 지집(gzip) 등의 무손실 압축 방법이 목표 소프트웨어의 실행 가능한 코드를 압축하는 데 사용될 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 비디오 스트림 내에 포함될 수 있다. 대부분의 타입들의 비디오 스트림들은 일반적인 컨테이너 포맷들이기 때문에, 데이터, 및 더 구체적으로는, 목표 소프트웨어의 실행 가능한 코드는 이러한 비디오 스트림에 포함될 수 있다. 특정 실시예들에서, 데이터 스트림의 제1 부분은, 소프트웨어의 실행 가능한 코드를 로드 및 실행하는 데 필요한 메모리 공간(예를 들어, RAM 메모리 공간)의 크기를 나타내는 파라미터 등의, 동작 변수들 및 파라미터들을 또한 포함할 수 있다.
특정 실시예들에서, 데이터 스트림의 제2 부분은 선택적으로 실행 중에 목표 소프트웨어에 의해 소비될 수 있는 추가 데이터를 포함할 수 있다. 특정 실시예들에서, 추가 데이터는 선택적으로 임의의 적합한 인코딩 또는 압축 방법들을 사용해서 인코딩 또는 압축될 수 있으며, 하나의 또는 그 이상의 데이터 패킷들로서 송신될 수 있다. 다시 말해서, 데이터 스트림이 비디오 스트림이면, 추가 데이터는 MPEG 인코딩 등의 비디오 인코딩 방법을 사용해서 인코딩될 수 있다.
특정 실시예들에서, 데이터 스트림을 수신할 때, 스터브는 데이터 스트림의 제1 부분에 액세스하여 그것에 포함된 목표 소프트웨어의 실행 가능한 코드를 추출할 수 있다. 필요하면, 스터브는 목표 소프트웨어의 추출된 실행 가능한 코드를 디코딩 또는 압축 해제할 수 있다. 스터브에 의해 사용된 디코딩 또는 압축 해제 방법들은 목표 소프트웨어의 실행 가능한 코드를 인코딩 또는 압축하는 데 사용된 인코딩 또는 압축 방법들에 대응할 수 있다. 예를 들어, 목표 소프트웨어의 실행 가능한 코드가 적합한 압축 알고리즘(예를 들어, 무손실 압축 알고리즘)을 사용해서 압축되었으면, 스터브는 대응 압축 해제 알고리즘을 사용해서 그것을 압축 해제할 수 있다. 유사하게, 목표 소프트웨어의 실행 가능한 코드가 적합한 인코딩 알고리즘을 사용해서 인코딩되었으면, 스터브는 대응 디코딩 알고리즘을 사용해서 그것을 디코딩할 수 있다. 또한, 특정 실시예들에서, 스터브는 데이터 스트림의 제1 부분에 또한 액세스하여 목표 소프트웨어의 실행 가능한 코드를 로드 및 실행하는 데 필요한 메모리 공간의 크기를 나타내는 파라미터들을 추출할 수 있다.
특정 실시예들에서, 무허가 또는 악성 소프트웨어가 클라이언트에서 다운로드 및 실행되는 것을 방지하기 위해, 단계(204)에 도시된 바와 같이, 스터브는 임의의 적합한 유효성 검사 방법들을 사용해서 데이터 스트림의 제1 부분으로부터 추출된 목표 소프트웨어의 실행 가능한 코드를 유효성 검사할 수 있다. 특정 실시예들에서, 신뢰 소스들(예를 들어, 신뢰 서버들의 도메인 이름들 또는 IP 어드레스들)의 화이트 리스트가 스터브에 제공될 수 있다. 소프트웨어 물품을 수신할 때, 스터브는 소프트웨어를 송신하는 소스(예를 들어, 서버 또는 웹사이트)를 화이트 리스트와 비교할 수 있다. 화이트 리스트의 신뢰 소스들에 의해 송신된 소프트웨어만이 클라이언트에서 실행될 수 있다. 화이트 리스트에 없는 소스들로부터 수신된 소프트웨어는 폐기 또는 격리될 수 있다. 특정 실시예들에서, 데이터 스트림의 제1 부분에 포함된 목표 소프트웨어의 실행 가능한 코드는 서명되고 디지털 인증서와 연관될 수 있다. 스터브는 연관된 디지털 인증서를 사용해서 목표 소프트웨어의 실행 가능한 코드를 유효성 검사할 수 있다.
목표 소프트웨어의 실행 가능한 코드가 유효하지 않으면(단계(206), "아니오"), 목표 소프트웨어의 실행 가능한 코드는 클라이언트에서 개시되지 않으며 폐기될 수 있다. 한편, 목표 소프트웨어의 실행 가능한 코드가 유효하면(단계(206), "예"), 특정 실시예들에서, 단계(208)에 도시된 바와 같이, 스터브는 목표 소프트웨어의 실행 가능한 코드를 로드 및 실행하기 위해 클라이언트에서 충분한 양의 메모리를 할당할 수 있다. 특정 실시예들에서, 할당된 메모리의 양은, 데이터 스트림의 제1 부분에 포함된 변수에 의해 표시된, 목표 소프트웨어의 실행 가능한 코드를 로드 및 실행하는 데 필요한 메모리 공간의 크기보다 작지 않을 수 있다. 특정 실시예들에서, 할당된 메모리는 클라이언트의 동적 메모리, 가상 메모리, 또는 RAM일 수 있다.
대부분의 운영 체제들은 애플리케이션 프로그램이 실행 시간 중에 가상 또는 동적 메모리를 할당 및 할당 해제하고 다른 타입들의 메모리 관련 함수들을 실행할 수 있게 하는 라이브러리 함수들을 제공한다. 특정 실시예들에서, 스터브는, 적합한 외부 함수 라이브러리를 통해, 목표 소프트웨어의 실행 가능한 코드를 위한 요구된 메모리 공간을 할당하기 위해 클라이언트의 운영 체제에 의해 제공된 적합한 라이브러리 함수들을 호출할 수 있다. 예를 들어, 상술된 바와 같이, "malloc"은 동적 메모리 공간을 할당하기 위한 C 및 C++ 프로그래밍 언어들 둘 다의 표준 라이브러리 함수이다. 마이크로소프트 윈도 플랫폼들의 경우, "VirtualAlloc"은 가상 어드레스 공간의 페이지들의 영역을 예약하기 위한 Win32 라이브러리 함수이다. 메모리가 할당되었으면, 스터브는 적합한 라이브러리 함수들을 호출하여, 할당된 메모리 공간을 위한 플래그를 "실행 가능함(executable)"으로 설정할 수 있고, 이는 할당된 메모리에 저장된 데이터가 실행 가능한 코드임을 운영 체제에 나타낸다. 예를 들어, 마이크로소프트 윈도의 경우, 코드를 실행할 권리, 및 운영상 코드를 판독 또는 기록할 권리를 가진 충분한 양의 가상 메모리를 운영 체제에 요청하기 위해 속성 "PAGE_EXECUTE", "PAGE_EXECUTE_READ", "PAGE_EXECUTE_READWRITE", 또는 "PAGE_EXECUTE_WRITECOPY"가 (예를 들어, "VirtualAlloc"를 사용해서) 메모리 할당과 관련하여 명시될 수 있다.
특정 실시예들에서, 단계(210)에 도시된 바와 같이, 스터브는 클라이언트의 하드 드라이브에 목표 소프트웨어의 실행 가능한 코드를 저장 또는 설치할 필요 없이 할당된 메모리(예를 들어, 할당된 동적 메모리)에 직접 목표 소프트웨어의 실행 가능한 코드를 로드할 수 있다. 특정 실시예들에서, 스터브는 할당된 가상 또는 동적 메모리 공간에 직접 목표 소프트웨어의 실행 가능한 코드를 나타내는 바이너리 데이터를 복사하기 위해 클라이언트의 운영 체제 또는 클라이언트의 소프트웨어 라이브러리들에 의해 제공된 적합한 라이브러리 함수들을 호출할 수 있다. 예를 들어, 마이크로소프트 윈도의 경우, "CopyMemory"는 한 로케이션으로부터 다른 로케이션으로 메모리의 한 블록을 복사하기 위한 함수이고; "memcpy"는 하나의 메모리 로케이션으로부터 다른 메모리 로케이션으로 데이터를 복사하기 위한 C 및 C++ 프로그래밍 언어들 둘 다의 표준 라이브러리 함수이다.
특정 실시예들에서, 목표 소프트웨어는 특정 라이브러리 함수들을 요구할 수 있다. 요구되는 라이브러리 함수가 클라이언트에 이미 존재하면, 스터브는 목표 소프트웨어를 위해 요구되는 라이브러리 함수를 포함하는 공유 라이브러리를 로드할 수 있다. 예를 들어, 마이크로소프트 윈도의 경우, "LoadLibrary" 함수를 사용해서 공유 라이브러리(예를 들어, DLL)가 로드될 수 있다. 한편, 요구되는 라이브러리 함수가 클라이언트에 존재하지 않으면, 필요할 때 목표 소프트웨어가 라이브러리 함수를 사용할 수 있도록, 스터브는 적합한 서버로부터 요구되는 라이브러리 함수를 포함하는 공유 라이브러리 또는 요구되는 라이브러리 함수 자체를 다운로드하고, 공유 라이브러리 또는 요구되는 라이브러리 함수를 위해 가상 메모리를 할당하며, 할당된 가상 메모리에 공유 라이브러리 또는 요구되는 라이브러리 함수를 기록할 수 있다. 다시 말해서, 실행 중에 목표 소프트웨어에 의해 요구되는 리소스들(예를 들어, 라이브러리 함수들)에 대해, 리소스들이 클라이언트에 이미 존재하면, 클라이언트의 리소스들이 사용되고; 리소스들이 클라이언트에 존재하지 않으면, 스터브는 목표 소프트웨어를 위해 리소스들을 다운로드한다.
특정 실시예들에서, 스터브는, 할당된 메모리에 로드된 목표 소프트웨어의 실행 가능한 코드에 관한 정보를 포함하도록, 점프 테이블이라고도 하는, 분기 테이블을 조정할 수도 있다. 이 프로세스는 "수리(fix-up)" 프로세스라고도 할 수 있다. 분기 테이블은 프로그램의 한 파트로부터 다른 파트로 또는 한 프로그램에서 다른 프로그램으로 프로그램 제어를 이전하는 효율적인 방법이다. 적합한 분기 테이블 엔트리들을 조정함으로써, 운영 체제는 할당된 메모리에 이제 로드된 소프트웨어의 실행 가능한 코드를 인식하게 될 수 있다.
수리 프로세스 중에 실행되는 실제 단계들은 플랫폼 또는 클라이언트의 운영 체제에 따라 변할 수 있다. 예를 들어, 마이크로소프트 윈도 플랫폼의 경우, 실행 가능한 포맷은 통상 재배치 테이블(relocation table) 및 가져오기 테이블(import table)을 가진다. 일반적으로, 실행 가능한 코드는 고정된 어드레스로 로드될 것이라는 가정하에 링크된다. 실행 가능한 코드를 상이한 어드레스에 로드하기 위해서는, 실행 가능한 코드에 의해 사용된 임의의 절대 어드레스들이 발견되어, 베이스 어드레스의 변경에 부응하도록 "수리"된다. 이는 재배치 테이블을 사용해서 달성될 수 있다. 특정 실시예들에서, 재배치 테이블은 실행 가능한 코드 내의 모든 절대 어드레스들의 목록을 컴파일링하여, 실행 가능한 코드가 로드될 때 그것들이 수리될 수 있게 한다. 가져오기 테이블은 실행 가능한 코드가 호출할 수 있는 모든 루틴들의 절대 어드레스들을 목록화한다. 이는 API 루틴들 및 다른 동적-링크 라이브러리들(DLL들)의 루틴들을 모두 포함할 수 있다. 이 가져오기 어드레스들은 현재 프로세스의 어드레스 공간 내의 루틴들의 실제 어드레스들로 대체된다. 가져오기 테이블은 실행 가능한 코드 내의 이 어드레스들의 로케이션의 목록이다(이 어드레스들은 점프 테이블 또는 트램펄린 영역 내에 있을 수 있지만, 간접 호출들을 위한 데이터의 목록일 수도 있다).
특정 실시예들은 마이크로소프트 윈도 운영 체제들에서 사용되는 실행 파일, 객체 코드, 및 DLL들의 파일 포맷인, PE(Portable Executable) 포맷을 이용할 수 있다. PE 포맷은 운영 체제 소프트웨어 아키텍처의 다수의 환경들에서 변통성이 있다. 일반적으로, PE 포맷은 마이크로소프트 윈도 운영 체제 로더가 래핑된(wrapped) 실행 가능한 코드를 관리하는 데 필요한 정보를 요약(encapsulate)하는 데이터 구조이다. 특정 실시예들은 PE 포맷을 사용해서 소프트웨어의 실행 가능한 코드를 컴파일링 및 저장할 수 있다. 다른 플랫폼들의 경우, 본 발명의 구현들은 어떠한 수리도 없이 단일 엔트리 포인트를 요구하는 원시(raw) 실행 가능한 코드와 함께 동작할 수 있다. 일부 구현들에서, 원시 실행 가능한 코드는 자체로 수리들을 실행하도록 구성될 수 있으며, ELF 및 MACH-O와 같은 코드를 커버할 수 있다.
특정 실시예들에서, 단계(212)에 도시된 바와 같이, 목표 소프트웨어는 클라이언트에서 실행될 수 있다. 특정 실시예들에서, 목표 소프트웨어의 실행 가능한 코드는 그것이 저장되어 있는 할당된 동적 메모리로부터 직접 개시될 수 있다. 특정 실시예들에서, 스터브는 할당된 메모리에 로드된 목표 소프트웨어의 실행 가능한 코드가 실행을 시작하게 야기할 수 있다. 따라서, 스터브는 목표 소프트웨어에 실행을 이전할 수 있다.
특정 실시예들에서, 스터브는, 단계(214)에 도시된 바와 같이, 소켓, 또는 더 정확하게는, 클라이언트와 서버 간의 네트워크 연결 및 데이터 스트림과 연관된, 인터넷 소켓 또는 네트워크 소켓을 클라이언트에서 지금 실행중인 목표 소프트웨어에 전달할 수 있다. 네트워크 소켓들은 들어오는 데이터 패킷들을 적합한 애플리케이션 프로세스 또는 스레드에 전달하기 위한 메커니즘을 구성한다. 데이터 스트림과 연관된 네트워크 소켓을 목표 소프트웨어에 전달함으로써, 목표 소프트웨어는 데이터 스트림의 제2 부분에 추가 데이터를 포함하는 추가 데이터 패킷들을 이제 수신할 수 있다. 그 후, 목표 소프트웨어는 데이터 스트림의 제2 부분에 포함된 추가 데이터를 소비(예를 들어, 처리)할 수 있다. 특정 실시예들에서, 스터브는 지금 실행중인 목표 소프트웨어에 네트워크 소켓을 전달하기 위해 클라이언트의 운영 체제에 의해 제공된 적합한 라이브러리 함수들을 호출할 수 있다. 예를 들어, 윈속(Winsock)이라고도 하는 윈도 소켓(Window Sockets) 애플리케이션 프로그래밍 인터페이스(API)는 "WSADuplicateSocket" 함수를 사용해서 네트워크 소켓이 한 프로세스로부터 다른 프로세스로 전달될 수 있게 한다.
목표 소프트웨어는 완료될 때까지 실행을 계속할 수 있다. 특정 실시예들에서, 목표 소프트웨어가 실행을 완료했다면(즉, 종료했다면), 목표 소프트웨어 프로그램의 실행 가능한 코드를 로드하는 데 사용되는 동적 메모리 공간은 (예를 들어, 클라이언트의 운영 체제에 의해) 할당 해제될 수 있다. 예를 들어, 마이크로소프트 윈도의 경우, "VirtualFree" 함수가 목표 소프트웨어의 실행 가능한 코드가 저장되어 있는 할당된 메모리를 해방하기 위해 호출될 수 있다. 그 후, 이 메모리 공간은 다른 목적들을 위해 사용될 수 있으며, 다른 데이터가 동일한 메모리 공간에 로드되어서, 목표 소프트웨어의 실행 가능한 코드를 무효화할 수 있다. 이 시점에, 목표 소프트웨어는 클라이언트에 대한 어떠한 상태 변경도 없이 클라이언트에 더 이상 존재하지 않는데(예를 들어, 드라이브에 파일들이 없음, 시스템 등록 변경 없음 등), 이는 그것이 스터브에 의해 메모리에 직접 설치되었고, 일부 구현들에서, 브라우저 캐시 또는 다른 임시 데이터 기억 메커니즘들을 포함하는 클라이언트의 어떠한 영구 매체에도 저장되지 않았기 때문이다.
일부 구현들에서, 스트림에 포함되고 스터브에 의해 개시된 제1 실행 가능한 코드 객체 자체가 제2 실행 가능한 코드 객체를 또한 포함하는 다른 데이터 스트림을 요청함으로써 다른 프로세스가 생성되게 야기할 수 있다. 제2 실행 가능한 코드 객체는 제1 실행 가능한 코드 객체의 자식 프로세스로서 개시될 수 있으며, 제1 실행 가능한 코드 객체에 의해 생성된 동일한 샌드-박싱된(sand-boxed) 파일 시스템을 공유할 수 있다. 예를 들어, 제1 실행 가능한 코드 객체는 하나의 또는 그 이상의 제2 실행 가능한 코드 객체들이 전적으로 메모리에서 실행되고 제1 가상 기계 코드 객체에 의해 샌드-박싱될 수 있게 하는 가상 기계일 수 있다. 특정 구현들에서, 예를 들어, 제2 코드 객체에 의한 데이터 기억 서브시스템으로의 기록들은, 사용자가 클라이언트를 로그 오프할 때 분석될 수 있는 주변 장치가 아닌, 메모리에 가상 기계에 의해 기록된다. 예를 들어, 이 실시예는, 제1 실행 가능한 코드 객체가 입증되거나 테스트될 제2 프로그램을 샌드-박싱하는 가상 기계일 수 있다는 점에서 소프트웨어의 데모 버전들을 허용하는 데 사용될 수 있다. 상술된 바와 같이, 제1 및 제2 실행 가능한 코드 객체들이 끝날 때, 메모리 내의 그 객체들의 모든 흔적들이 사라진다. 상기 실시예는 또한 통상 애플리케이션 실행 중에 캐싱되는 데이터로의 무허가 액세스를 방지하는 데 사용될 수 있다.
특정 실시예들은 네트워크 환경에서 구현될 수 있다. 도 3은 일례의 네트워크 환경(300)을 도시한다. 네트워크 환경(300)은 하나의 또는 그 이상의 서버들(320) 및 하나의 또는 그 이상의 클라이언트들(330)을 서로 연결하는 네트워크(310)를 포함한다. 특정 실시예들에서, 네트워크(310)는 인트라넷, 엑스트라넷, 가상 사설 네트워크(VPN), 근거리 통신망(LAN), 무선 LAN(WLAN), 광역 통신망(WAN), 대도시 통신망(MAN), 인터넷의 일부분, 또는 다른 네트워크(310) 또는 2개의 또는 그 이상의 네트워크들(310)의 조합이다. 본 발명은 임의의 적합한 네트워크(310)를 고려한다.
하나의 또는 그 이상의 링크들(350)은 서버(320) 또는 클라이언트(330)를 네트워크(310)에 연결한다. 특정 실시예들에서, 하나의 또는 그 이상의 링크들(350)은 각각 하나의 또는 그 이상의 유선, 무선, 또는 광 링크들(350)을 포함한다. 특정 실시예들에서, 하나의 또는 그 이상의 링크들(350)은 인트라넷, 엑스트라넷, VPN, LAN, WLAN, WAN, MAN, 인터넷의 일부분, 또는 다른 링크(350) 또는 2개의 또는 그 이상의 링크들(350)의 조합이다. 본 발명은 서버들(320) 및 클라이언트들(330)을 네트워크(310)에 연결하는 임의의 적합한 링크들(350)을 고려한다.
특정 실시예들에서, 각각의 서버(320)는 단일 서버일 수 있으며, 또는 다수의 컴퓨터들 또는 다수의 데이터센터들에 걸치는 분산 서버일 수 있다. 서버들(320)은 각종 타입들, 예를 들어, 제한 없이, 웹 서버, 뉴스 서버, 메일 서버, 메시지 서버, 광고 서버, 파일 서버, 애플리케이션 서버, 교환 서버, 데이터베이스 서버, 또는 프록시 서버일 수 있다. 특정 실시예들에서, 각각의 서버(320)는 서버(320)에 의해 구현 또는 지원되는 적합한 기능들을 수행하기 위한 하드웨어, 소프트웨어, 또는 내장된 논리 컴포넌트들 또는 2개의 또는 그 이상의 이러한 컴포넌트들의 조합을 포함할 수 있다. 예를 들어, 웹 서버는 일반적으로 웹 페이지들 또는 웹 페이지들의 특정 요소들을 포함하는 웹사이트들을 호스팅할 수 있다. 더 구체적으로, 웹 서버는 HTML 파일들 또는 다른 파일 타입들을 호스팅할 수 있으며, 또는 요청시 파일들을 동적으로 생성 또는 구성하고, 클라이언트들(330)로부터의 HTTP 또는 다른 요청들에 응답해서 클라이언트들(330)에 전달할 수 있다. 메일 서버는 일반적으로 전자 메일 서비스들을 각종 클라이언트들(330)에 제공할 수 있다. 데이터베이스 서버는 일반적으로 하나의 또는 그 이상의 데이터 저장소들에 저장된 데이터를 관리하기 위한 인터페이스를 제공할 수 있다.
특정 실시예들에서, 스터브(322)의 실행 가능한 코드 및 소프트웨어(324) 물품의 실행 가능한 코드는 서버(320)에 상주할 수 있다. 이들은 클라이언트(330)에 저장 또는 설치되지 않고 실행을 위해 클라이언트(330)에 다운로드될 수 있다. 이들이 클라이언트(330)에서 실행되는 동안, 이들은 클라이언트(330)의 가상 메모리에서 실행된다. 실행들이 완료된 후에, 가상 메모리가 해방될 때 이들은 클라이언트(330)로부터 제거되어서, 클라이언트(330)에 흔적이 남지 않는다.
특정 실시예들에서, 하나의 또는 그 이상의 데이터 스토리지들(340)이 하나의 또는 그 이상의 링크들(350)을 통해 하나의 또는 그 이상의 서버들(320)에 통신 연결될 수 있다. 특정 실시예들에서, 데이터 스토리지들(340)은 각종 타입들의 정보를 저장하는 데 사용될 수 있다. 특정 실시예들에서, 데이터 스토리지들(340)에 저장된 정보는 특정 데이터 구조들에 따라 조직될 수 있다. 특정 실시예들에서, 각각의 데이터 스토리지(340)는 관계형 데이터베이스일 수 있다. 특정 실시예들은 서버들(320) 또는 클라이언트들(330)이 데이터 스토리지(340)에 저장된 정보를 관리, 예를 들어, 검색, 변경, 추가, 또는 삭제할 수 있게 하는 인터페이스들을 제공할 수 있다.
특정 실시예들에서, 각각의 클라이언트(330)는 클라이언트(330)에 의해 구현 또는 지원되는 적합한 기능들을 수행하기 위한 하드웨어, 소프트웨어, 또는 내장된 논리 컴포넌트들 또는 2개의 또는 그 이상의 이러한 컴포넌트들의 조합을 포함하는 전자 디바이스일 수 있다. 예를 들어, 제한 없이, 클라이언트(330)는 데스크톱 컴퓨터 시스템, 노트북 컴퓨터 시스템, 넷북 컴퓨터 시스템, 핸드헬드 전자 디바이스, 또는 이동 전화일 수 있다. 본 발명은 임의의 적합한 클라이언트들(330)을 고려한다. 클라이언트(330)는 클라이언트(330)의 네트워크 사용자가 네트워크(310)에 액세스할 수 있게 해줄 수 있다. 클라이언트(330)는 그것의 사용자가 다른 클라이언트들(330)의 다른 사용자들과 통신할 수 있게 해줄 수 있다.
클라이언트(330)는, 마이크로소프트 인터넷 익스플로러(MICROSOFT INTERNET EXPLORER), 구글 크롬(GOOGLE CHROME) 또는 모질라 파이어폭스(MOZILLA FIREFOX) 등의 웹 브라우저(332)를 가질 수 있으며, 툴바(TOOLBAR) 또는 야후 툴바(YAHOO TOOLBAR) 등의 하나의 또는 그 이상의 애드온들(add-ons), 플러그-인들(plug-ins), 또는 다른 확장들을 가질 수 있다. 클라이언트(330)의 사용자는 웹 브라우저(332)를 서버(320)로 향하게 하는 URL(Uniform Resource Locator) 또는 다른 어드레스를 입력할 수 있으며, 웹 브라우저(332)는 HTTP(Hyper Text Transfer Protocol) 요청을 생성하고 HTTP 요청을 서버(320)에 전달할 수 있다. 서버(320)는 HTTP 요청을 수신하고 HTTP 요청에 응답하여 하나의 또는 그 이상의 HTML(Hyper Text Markup Language) 파일들을 클라이언트(330)에 전달할 수 있다. 클라이언트(330)는 사용자에게 제시하기 위해 서버(320)로부터의 HTML 파일들에 기초하여 웹 페이지를 렌더링할 수 있다. 본 발명은 임의의 적합한 웹 페이지 파일들을 고려한다. 일례로서, 제한 없이, 웹 페이지들은 특정 요구 사항들에 따라, HTML 파일들, XHTML(Extensible Hyper Text Markup Language) 파일들, 또는 XML(Extensible Markup Language) 파일들로부터 렌더링할 수 있다. 이러한 페이지들은, 예를 들어, 제한 없이, JAVASCRIPT, JAVA, MICROSOFT SILVERLIGHT로 작성된 스크립트들 등의 스크립트들, AJAX(Asynchronous JAVASCRIPT and XML) 등의 마크업 언어 및 스크립트들의 조합들 등을 또한 실행할 수 있다. 여기서, 적절한 경우, 웹 페이지에 대한 언급은 (브라우저가 웹 페이지를 렌더링하는 데 사용할 수 있는) 하나의 또는 그 이상의 대응 웹 페이지 파일들을 망라하며, 반대의 경우도 마찬가지이다.
특정 실시예들은 하나의 또는 그 이상의 컴퓨터 시스템들에서 구현될 수 있다. 도 4는 일례의 컴퓨터 시스템(400)을 도시한다. 특정 실시예들에서, 하나의 또는 그 이상의 컴퓨터 시스템들(400)은 본 명세서에 기술 또는 도시된 하나의 또는 그 이상의 방법들의 하나의 또는 그 이상의 단계들을 실행한다. 특정 실시예들에서, 하나의 또는 그 이상의 컴퓨터 시스템들(400)은 본 명세서에 기술 또는 도시된 기능을 제공한다. 특정 실시예들에서, 하나의 또는 그 이상의 컴퓨터 시스템들(400)에서 실행중인 소프트웨어는 본 명세서에 기술 또는 도시된 하나의 또는 그 이상의 방법들의 하나의 또는 그 이상의 단계들을 실행하거나, 또는 본 명세서에 기술 또는 도시된 기능을 제공한다. 특정 실시예들은 하나의 또는 그 이상의 컴퓨터 시스템들(400)의 하나의 또는 그 이상의 부분들을 포함한다.
본 발명은 임의의 적합한 수의 컴퓨터 시스템들(400)을 고려한다. 본 발명은 임의의 적합한 물리적 형태를 취한 컴퓨터 시스템(400)을 고려한다. 일례로서 제한 없이, 컴퓨터 시스템(400)은 내장된 컴퓨터 시스템, 시스템-온-칩(SOC), 싱글-보드 컴퓨터 시스템(SBC)(예를 들어, 컴퓨터-온-모듈(COM) 또는 시스템-온-모듈(SOM) 등), 데스크톱 컴퓨터 시스템, 랩톱 또는 노트북 컴퓨터 시스템, 대화형 키오스크, 메인프레임, 컴퓨터 시스템들의 망, 이동 전화, 개인 휴대 정보 단말기(PDA), 서버, 또는 이들의 2개의 또는 그 이상의 조합일 수 있다. 적절한 경우, 컴퓨터 시스템(400)은 하나의 또는 그 이상의 컴퓨터 시스템들(400)을 포함할 수 있으며; 통합되거나 분산될 수 있으며; 다수의 로케이션들에 걸쳐 있을 수 있고; 다수의 기계들에 걸쳐 있을 수 있으며; 또는 하나의 또는 그 이상의 네트워크들의 하나의 또는 그 이상의 클라우드 컴포넌트들을 포함할 수 있는, 클라우드에 상주할 수 있다. 적절한 경우, 하나의 또는 그 이상의 컴퓨터 시스템들(400)은 상당한 공간적 또는 시간적 제한 없이 본 명세서에 기술 또는 도시된 하나의 또는 그 이상의 방법들의 하나의 또는 그 이상의 단계들을 실행할 수 있다. 일례로서 제한 없이, 하나의 또는 그 이상의 컴퓨터 시스템들(400)은 실시간으로 또는 일괄 모드(batch mode)로 본 명세서에 기술 또는 도시된 하나의 또는 그 이상의 방법들의 하나의 또는 그 이상의 단계들을 실행할 수 있다. 적절한 경우, 하나의 또는 그 이상의 컴퓨터 시스템들(400)은 상이한 시간에 또는 상이한 로케이션들에서 본 명세서에 기술 또는 도시된 하나의 또는 그 이상의 방법들의 하나의 또는 그 이상의 단계들을 실행할 수 있다.
특정 실시예들에서, 컴퓨터 시스템(400)은 프로세서(402), 메모리(404), 스토리지(406), 입력/출력(I/O) 인터페이스(408), 통신 인터페이스(410), 및 버스(412)를 포함한다. 본 발명이 특정 배열로 특정 수의 특정 컴포넌트들을 가진 특정 컴퓨터 시스템을 기술 및 도시하지만, 본 발명은 임의의 적합한 배열로 임의의 적합한 수의 임의의 적합한 컴포넌트들을 가진 임의의 적합한 컴퓨터 시스템을 고려한다.
특정 실시예들에서, 프로세서(402)는 컴퓨터 프로그램을 작성하는 등의 명령들을 실행하기 위한 하드웨어를 포함한다. 일례로서 제한 없이, 명령들을 실행하기 위해, 프로세서(402)는 내부 레지스터, 내부 캐시, 메모리(404), 또는 스토리지(406)로부터 명령들을 검색(또는 페치)하고; 이들을 디코딩 및 실행하며; 그 후 하나의 또는 그 이상의 결과들을 내부 레지스터, 내부 캐시, 메모리(404), 또는 스토리지(406)에 기록할 수 있다. 특정 실시예들에서, 프로세서(402)는 데이터, 명령들, 또는 어드레스들을 위한 하나의 또는 그 이상의 내부 캐시들을 포함할 수 있다. 본 발명은, 적절한 경우, 임의의 적합한 수의 임의의 적합한 내부 캐시들을 포함하는 프로세서(402)를 고려한다. 일례로서 제한 없이, 프로세서(402)는 하나의 또는 그 이상의 명령 캐시들, 하나의 또는 그 이상의 데이터 캐시들, 및 하나의 또는 그 이상의 변환 색인 버퍼들(TLB들)을 포함할 수 있다. 명령 캐시들 내의 명령들은 메모리(404) 또는 스토리지(406) 내의 명령들의 복사본들일 수 있으며, 명령 캐시들은 프로세서(402)에 의한 명령들의 검색의 속도를 높일 수 있다. 데이터 캐시들 내의 데이터는 프로세서(402)에서 실행중인 명령들이 조작하기 위한 메모리(404) 또는 스토리지(406) 내의 데이터의 복사본일 수 있으며; 프로세서(402)에서 실행중인 다음 명령들에 의한 액세스를 위한 또는 메모리(404) 또는 스토리지(406)로의 기록을 위한 프로세서(402)에서 실행된 이전 명령들의 결과들일 수 있으며; 또는 다른 적합한 데이터일 수 있다. 데이터 캐시들은 프로세서(402)에 의한 판독 또는 기록 동작들의 속도를 높일 수 있다. TLB들은 프로세서(402)를 위한 가상-어드레스 변환의 속도를 높일 수 있다. 특정 실시예들에서, 프로세서(402)는 데이터, 명령들, 또는 어드레스들을 위한 하나의 또는 그 이상의 내부 레지스터들을 포함할 수 있다. 본 발명은, 적절한 경우, 임의의 적합한 수의 임의의 적합한 내부 레지스터들을 포함하는 프로세서(402)를 고려한다. 적절한 경우, 프로세서(402)는 하나의 또는 그 이상의 산술 논리 연산 장치들(ALU들)을 포함할 수 있으며; 멀티-코어 프로세서일 수 있으며; 또는 하나의 또는 그 이상의 프로세서들(402)을 포함할 수 있다. 본 발명이 특정 프로세서를 기술 및 도시하지만, 본 발명은 임의의 적합한 프로세서를 고려한다.
특정 실시예들에서, 메모리(404)는 프로세서(402)가 실행할 명령들 또는 프로세서(402)가 조작할 데이터를 저장하기 위한 메인 메모리를 포함한다. 일례로서 제한 없이, 컴퓨터 시스템(400)은 스토리지(406) 또는 다른 소스(예를 들어, 다른 컴퓨터 시스템(400) 등)로부터의 명령들을 메모리(404)에 로드할 수 있다. 프로세서(402)는 그 후 메모리(404)로부터의 명령들을 내부 레지스터 또는 내부 캐시에 로드할 수 있다. 명령들을 실행하기 위해, 프로세서(402)는 내부 레지스터 또는 내부 캐시로부터의 명령들을 검색하고 이들을 디코딩할 수 있다. 명령들의 실행 중에 또는 실행 후에, 프로세서(402)는 하나의 또는 그 이상의 결과들(중간 또는 최종 결과들일 수 있음)을 내부 레지스터 또는 내부 캐시에 기록할 수 있다. 프로세서(402)는 그 후 하나의 또는 그 이상의 그 결과들을 메모리(404)에 기록할 수 있다. 특정 실시예들에서, 프로세서(402)는 (스토리지(406) 또는 다른 곳이 아니라) 하나의 또는 그 이상의 내부 레지스터들 또는 내부 캐시들 내의 또는 메모리(404) 내의 명령들만을 실행하고, (스토리지(406) 또는 다른 곳이 아니라) 하나의 또는 그 이상의 내부 레지스터들 또는 내부 캐시들 내의 또는 메모리(404) 내의 데이터만을 조작한다. 하나의 또는 그 이상의 메모리 버스들(각각 어드레스 버스 및 데이터 버스를 포함할 수 있음)이 프로세서(402)를 메모리(404)에 연결할 수 있다. 후술되는 바와 같이, 버스(412)는 하나의 또는 그 이상의 메모리 버스들을 포함할 수 있다. 특정 실시예들에서, 하나의 또는 그 이상의 메모리 관리 유닛들(MMU들)이 프로세서(402)와 메모리(404) 사이에 상주하고, 프로세서(402)에 의해 요청된 메모리(404)로의 액세스들을 용이하게 한다. 특정 실시예들에서, 메모리(404)는 랜덤 액세스 메모리(RAM)를 포함한다. 이 RAM은, 적절한 경우, 휘발성 메모리일 수 있다. 적절한 경우, 이 RAM은 동적 RAM(DRAM) 또는 정적 RAM(SRAM)일 수 있다. 더욱이, 적절한 경우, 이 RAM은 싱글-포트 또는 멀티-포트 RAM일 수 있다. 본 발명은 임의의 적합한 RAM을 고려한다. 적절한 경우, 메모리(404)는 하나의 또는 그 이상의 메모리들(404)을 포함할 수 있다. 본 발명이 특정 메모리를 기술 및 도시하지만, 본 발명은 임의의 적합한 메모리를 고려한다.
특정 실시예들에서, 스토리지(406)는 데이터 또는 명령들을 위한 대용량 스토리지를 포함한다. 일례로서 제한 없이, 스토리지(406)는 HDD, 플로피 디스크 드라이브, 플래시 메모리, 광 디스크, 광자기 디스크, 자기 테이프, 또는 범용 직렬 버스(USB) 드라이브, 또는 이들의 2개의 또는 그 이상의 조합을 포함할 수 있다. 적절한 경우, 스토리지(406)는 이동식 또는 비이동식(또는 고정형) 매체를 포함할 수 있다. 적절한 경우, 스토리지(406)는 컴퓨터 시스템(400)의 내부 또는 외부에 있을 수 있다. 특정 실시예들에서, 스토리지(406)는 비휘발성, 솔리드 스테이트 메모리이다. 특정 실시예들에서, 스토리지(406)는 판독 전용 메모리(ROM)를 포함한다. 적절한 경우, 이 ROM은 마스크-프로그램 ROM, 프로그래밍 가능 ROM(PROM), 소거 가능 PROM(EPROM), 전기적 소거 가능 PROM(EEPROM), 전기적 변경 가능 ROM(EAROM), 또는 플래시 메모리, 또는 이들의 2개의 또는 그 이상의 조합일 수 있다. 본 발명은 임의의 적합한 물리적 형태를 취한 대용량 스토리지(406)를 고려한다. 적절한 경우, 스토리지(406)는 프로세서(402)와 스토리지(406) 간의 통신을 용이하게 하는 하나의 또는 그 이상의 스토리지 제어 유닛들을 포함할 수 있다. 적절한 경우, 스토리지(406)는 하나의 또는 그 이상의 스토리지들(406)을 포함할 수 있다. 본 발명이 특정 스토리지를 기술 및 도시하지만, 본 발명은 임의의 적합한 스토리지를 고려한다.
특정 실시예들에서, I/O 인터페이스(408)는 컴퓨터 시스템(400)과 하나의 또는 그 이상의 I/O 디바이스들 간의 통신을 위한 하나의 또는 그 이상의 인터페이스들을 제공하는 하드웨어, 소프트웨어, 또는 둘 다를 포함한다. 적절한 경우, 컴퓨터 시스템(400)은 이 I/O 디바이스들 중 하나 또는 그 이상을 포함할 수 있다. I/O 디바이스들 중 하나 또는 그 이상은 사람과 컴퓨터 시스템(400) 간의 통신을 가능케 할 수 있다. 일례로서 제한 없이, I/O 디바이스는 키보드, 키패드, 마이크로폰, 모니터, 마우스, 프린터, 스캐너, 스피커, 스틸 카메라, 스타일러스, 태블릿, 터치 스크린, 트랙볼, 비디오 카메라, 다른 적합한 I/O 디바이스 또는 이들의 2개의 또는 그 이상의 조합을 포함할 수 있다. I/O 디바이스는 하나의 또는 그 이상의 센서들을 포함할 수 있다. 본 발명은 임의의 적합한 I/O 디바이스들 및 이들을 위한 임의의 적합한 I/O 인터페이스들(408)을 고려한다. 적절한 경우, I/O 인터페이스(408)는 프로세서(402)가 I/O 디바이스들 중 하나 또는 그 이상을 드라이브할 수 있게 해주는 하나의 또는 그 이상의 디바이스 또는 소프트웨어 드라이버들을 포함할 수 있다. 적절한 경우, I/O 인터페이스(408)는 하나의 또는 그 이상의 I/O 인터페이스들(408)을 포함할 수 있다. 본 발명이 특정 I/O 인터페이스를 기술 및 도시하지만, 본 발명은 임의의 적합한 I/O 인터페이스를 고려한다.
특정 실시예들에서, 통신 인터페이스(410)는 컴퓨터 시스템(400)과 하나의 또는 그 이상의 컴퓨터 시스템들(400) 또는 하나의 또는 그 이상의 네트워크들 간의 통신(예를 들어, 패킷-기반 통신 등)을 위한 하나의 또는 그 이상의 인터페이스들을 제공하는 하드웨어, 소프트웨어, 또는 둘 다를 포함한다. 일례로서 제한 없이, 통신 인터페이스(410)는 네트워크 인터페이스 컨트롤러(NIC), 또는 이더넷 또는 다른 유선-기반 네트워크 또는 무선 NIC(WNIC)와 통신하기 위한 네트워크 어댑터, 또는 WI-FI 네트워크 등의 무선 네트워크와 통신하기 위한 무선 어댑터를 포함할 수 있다. 본 발명은 임의의 적합한 네트워크 및 이를 위한 임의의 적합한 통신 인터페이스(410)를 고려한다. 일례로서 제한 없이, 컴퓨터 시스템(400)은 애드 혹 네트워크, 개인 영역 네트워크(PAN), 근거리 통신망(LAN), 광역 통신망(WAN), 대도시 통신망(MAN), 또는 인터넷의 하나의 또는 그 이상의 부분들, 또는 이들 중 2개의 또는 그 이상의 네트워크들의 조합과 통신할 수 있다. 이 네트워크들 중 하나의 또는 그 이상의 네트워크들의 하나의 또는 그 이상의 부분들은 유선 또는 무선일 수 있다. 일례로서, 컴퓨터 시스템(400)은 무선 PAN(WPAN)(예를 들어, BLUETOOTH WPAN 등), WI-FI 네트워크, WI-MAX 네트워크, 셀룰러 폰 네트워크(예를 들어, GSM(Global System for Mobile Communications) 네트워크), 또는 다른 적합한 무선 네트워크 또는 이들 중 2개의 또는 그 이상의 네트워크들의 조합과 통신할 수 있다. 적절한 경우, 컴퓨터 시스템(400)은 이 네트워크들 중 임의의 네트워크를 위한 임의의 적합한 통신 인터페이스(410)를 포함할 수 있다. 적절한 경우, 통신 인터페이스(410)는 하나의 또는 그 이상의 통신 인터페이스들(410)을 포함할 수 있다. 본 발명이 특정 통신 인터페이스를 기술 및 도시하지만, 본 발명은 임의의 적합한 통신 인터페이스를 고려한다.
특정 실시예들에서, 버스(412)는 컴퓨터 시스템(400)의 컴포넌트들을 서로 연결하는 하드웨어, 소프트웨어, 또는 둘 다를 포함한다. 일례로서 제한 없이, 버스(412)는 AGP(Accelerated Graphics Port) 또는 다른 그래픽 버스, EISA(Enhanced Industry Standard Architecture) 버스, FSB(front-side bus), HYPERTRANSPORT(HT) 인터커넥트, ISA(Industry Standard Architecture) 버스, INFINIBAND 인터커넥트, LPC(low-pin-count) 버스, 메모리 버스, MCA(Micro Channel Architecture) 버스, PCI(Peripheral Component Interconnect) 버스, PCI-X(PCI-Express) 버스, SATA(serial advanced technology attachment) 버스, VLB(Video Electronics Standards Association local) 버스, 또는 다른 적합한 버스 또는 이들 중 2개의 또는 그 이상의 버스들의 조합을 포함할 수 있다. 적절한 경우, 버스(412)는 하나의 또는 그 이상의 버스들(412)을 포함할 수 있다. 본 발명이 특정 버스를 기술 및 도시하지만, 본 발명은 임의의 적합한 버스 또는 인터커넥트를 고려한다.
본 명세서에서, 컴퓨터 판독 가능 기억 매체에 대한 언급은 하나의 또는 그 이상의 비일시적인 유형의(non-transitory, tangible) 컴퓨터 판독 가능 기억 매체 소유 구조를 망라한다. 일례로서 제한 없이, 적절한 경우, 컴퓨터 판독 가능 기억 매체는 반도체-기반 또는 다른 집적 회로(IC)(예를 들어, FPGA(field-programmable gate array) 또는 ASIC(application-specific IC)), 하드 디스크, HDD, 하이브리드 하드 드라이브(HHD), 광 디스크, 광 디스크 드라이브(ODD), 광자기 디스크, 광자기 드라이브, 플로피 디스크, 플로피 디스크 드라이브(FDD), 자기 테이프, 홀로그램 기억 매체, 솔리드 스테이트 드라이브(SSD), RAM-드라이브, SECURE DIGITAL 카드, SECURE DIGITAL 드라이브, 또는 다른 적합한 컴퓨터 판독 가능 기억 매체 또는 이들의 2개의 또는 그 이상의 조합을 포함할 수 있다. 본 명세서에서, 컴퓨터 판독 가능 기억 매체에 대한 언급은 35 U.S.C. §101 하의 특허 보호에 자격이 없는 임의의 매체를 배제한다. 본 명세서에서, 컴퓨터 판독 가능 기억 매체에 대한 언급은 35 U.S.C. §101 하의 특허 보호에 자격이 없는 결과로 일시적인 형태들의 신호 송신(예를 들어, 전파하는 전기 또는 전자기 신호 자체 등)을 배제한다. 적절한 경우, 컴퓨터 판독 가능한 비일시적 기억 매체는 휘발성, 비휘발성, 또는 휘발성과 비휘발성의 조합일 수 있다.
본 발명은 임의의 적합한 스토리지를 구현하는 하나의 또는 그 이상의 컴퓨터 판독 가능 기억 매체를 고려한다. 특정 실시예들에서, 적절한 경우, 컴퓨터 판독 가능 기억 매체는 프로세서(402)의 하나의 또는 그 이상의 부분들(예를 들어, 하나의 또는 그 이상의 내부 레지스터들 또는 캐시들 등), 메모리(404)의 하나의 또는 그 이상의 부분들, 스토리지(406)의 하나의 또는 그 이상의 부분들, 또는 이들의 조합을 구현한다. 특정 실시예들에서, 컴퓨터 판독 가능 기억 매체는 RAM 또는 ROM을 구현한다. 특정 실시예들에서, 컴퓨터 판독 가능 기억 매체는 휘발성 또는 영구 메모리를 구현한다. 특정 실시예들에서, 하나의 또는 그 이상의 컴퓨터 판독 가능 기억 매체들은 소프트웨어를 수록한다. 본 명세서에서, 적절한 경우, 소프트웨어에 대한 언급은 하나의 또는 그 이상의 애플리케이션들, 바이트코드, 하나의 또는 그 이상의 컴퓨터 프로그램들, 하나의 또는 그 이상의 실행 파일들, 하나의 또는 그 이상의 명령들, 논리, 기계 코드, 하나의 또는 그 이상의 스크립트들, 또는 소스 코드를 망라할 수 있으며, 그 역도 마찬가지이다. 특정 실시예들에서, 소프트웨어는 하나의 또는 그 이상의 애플리케이션 프로그래밍 인터페이스들(API들)을 포함한다. 본 발명은 임의의 적합한 프로그래밍 언어 또는 프로그래밍 언어들의 조합으로 작성 또는 달리 표현된 임의의 적합한 소프트웨어를 고려한다. 특정 실시예들에서, 소프트웨어는 소스 코드 또는 객체 코드로 표현된다. 특정 실시예들에서, 소프트웨어는, 예를 들어, C, 펄(Perl), 또는 적합한 확장 등의 더 높은 수준의 프로그래밍 언어로 표현된다. 특정 실시예들에서, 소프트웨어는 어셈블리어(또는 기계 코드) 등의 더 낮은 수준의 프로그래밍 언어로 표현된다. 특정 실시예들에서, 소프트웨어는 JAVA로 표현된다. 특정 실시예들에서, 소프트웨어는 HTML(Hyper Text Markup Language), XML(Extensible Markup Language), 또는 다른 적합한 마크업 언어로 표현된다.
본 명세서에서, 명백히 달리 지시되거나 또는 문맥상 달리 지시되지 않는 한, "또는(or)"은 포괄적이며 배타적이지 않다. 따라서, 본 명세서에서, 명백히 달리 지시되거나 또는 문맥상 달리 지시되지 않는 한, "A 또는 B"는 "A, B, 또는 둘 다"를 의미한다. 더욱이, 명백히 달리 지시되거나 또는 문맥상 달리 지시되지 않는 한, "및(and)"은 공동이며 각자이다. 따라서, 본 명세서에서, 명백히 달리 지시되거나 또는 문맥상 달리 지시되지 않는 한, "A 및 B"는 "공동으로 또는 각자, A 및 B"를 의미한다.
본 발명은 당업자라면 이해할 본 명세서에서의 일례의 실시예들에 대한 모든 변화들, 대체들, 변형들, 변경들, 및 수정들을 망라한다. 유사하게, 적절한 경우, 첨부된 청구항들은 당업자라면 이해할 본 명세서에서의 일례의 실시예들에 대한 모든 변화들, 대체들, 변형들, 변경들, 및 수정들을 망라한다. 더욱이, 특정 기능을 실행하도록 적응되거나, 배열되거나, 가능하거나, 구성되거나, 가능케 되거나, 동작 가능하거나, 또는 동작하는 장치 또는 시스템 또는 장치 또는 시스템의 컴포넌트에 대한 첨부된 청구항들에서의 언급은, 그것 또는 그 특정 기능이 작동되거나,켜져 있거나, 잠금 해제되어 있는지 여부에 관계없이, 해당 장치, 시스템, 컴포넌트가 그렇게 적응되거나, 배열되거나, 가능하거나, 구성되거나, 가능케 되거나, 동작 가능하거나, 또는 동작하는 한, 해당 장치, 시스템, 컴포넌트를 망라한다.

Claims (45)

  1. 제1 컴퓨팅 디바이스에 의해, 제1 가상 메모리를 할당하는 단계;
    상기 제1 컴퓨팅 디바이스에 의해, 통신 네트워크를 통해 다른 컴퓨팅 시스템으로부터 소프트웨어의 제1 부분(a first piece of software)의 실행 가능한 코드를 수신하는 단계;
    상기 제1 컴퓨팅 디바이스에 의해, 상기 소프트웨어의 제1 부분의 실행 가능한 코드를 상기 제1 가상 메모리에 직접 기록하는 단계;
    상기 제1 컴퓨팅 디바이스에 의해, 상기 제1 가상 메모리를 실행 가능하다고 표시하는 단계;
    상기 제1 컴퓨팅 디바이스에 의해, 상기 제1 가상 메모리로부터 직접 상기 소프트웨어의 제1 부분의 실행 가능한 코드를 실행하는 단계;
    상기 제1 컴퓨팅 디바이스에 의해, 상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된(facilitated) 소프트웨어의 제2 부분(a second piece of software)의 실행 가능한 코드를 다운로드하는 단계; 및
    상기 제1 컴퓨팅 디바이스에 의해, 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 실행하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 공유 라이브러리들을 로드하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 상기 제1 컴퓨팅 디바이스에서 실행중인 브라우저에서 실행되는 클라이언트-측 스크립트인 방법.
  4. 제3항에 있어서,
    상기 클라이언트-측 스크립트는 상기 브라우저에 의해 지원되는 외부 함수(foreign function) 인터페이스에 액세스하는 방법.
  5. 제4항에 있어서,
    상기 브라우저는 모질라 파이어폭스(Mozilla Firefox)이고 상기 클라이언트-측 스크립트는 자바스크립트(JavaScript)인 방법.
  6. 제3항에 있어서,
    상기 클라이언트-측 스크립트는 상기 제1 컴퓨팅 디바이스에 상주하는 외부 함수 라이브러리에 액세스하는 방법.
  7. 제6항에 있어서,
    상기 외부 함수 라이브러리는 ctypes 라이브러리인 방법.
  8. 제1항에 있어서,
    상기 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제1 가상 메모리의 할당을 해제하는 단계를 더 포함하는 방법.
  9. 제1항에 있어서,
    상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 다운로드하고, 실행하는 단계는
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 수신하는 단계;
    데이터 스트림으로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 추출하는 단계;
    제2 가상 메모리를 할당하는 단계;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 상기 제2 가상 메모리에 직접 기록하는 단계;
    상기 제2 가상 메모리를 실행 가능하다고 표시하는 단계; 및
    상기 제2 가상 메모리로부터 직접 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 실행하는 단계
    를 포함하는 방법.
  10. 제9항에 있어서,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 유효성 검사하는 단계;
    상기 제1 컴퓨팅 디바이스에 존재하는 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제1 공유 라이브러리들을 로드하는 단계; 및
    제2 컴퓨팅 디바이스로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제2 공유 라이브러리들을 다운로드하는 단계
    를 더 포함하는 방법.
  11. 제9항에 있어서,
    상기 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제2 가상 메모리의 할당을 해제하는 단계를 더 포함하는 방법.
  12. 제9항에 있어서,
    상기 제1 컴퓨팅 디바이스의 운영 체제에 기초하여 상기 소프트웨어의 제2 부분을 결정하는 단계를 더 포함하는 방법.
  13. 제9항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 제2 컴퓨팅 디바이스로부터 수신되고;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 제3 컴퓨팅 디바이스로부터 수신되는 방법.
  14. 제9항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드 및 상기 소프트웨어의 제2 부분의 실행 가능한 코드는 둘 다 제2 컴퓨팅 디바이스로부터 수신되는 방법.
  15. 제9항에 있어서,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 데이터 스트림에 포함(embed)되어 있는 방법.
  16. 제1 시스템으로서,
    하나의 또는 그 이상의 프로세서들에 의해 실행 가능한 명령들을 포함하는 메모리; 및
    상기 메모리에 연결되고 상기 명령들을 실행하도록 동작하는 하나의 또는 그 이상의 프로세서들을 포함하고, 상기 하나의 또는 그 이상의 프로세서들은, 상기 명령들을 실행할 때,
    제1 가상 메모리를 할당하고;
    통신 네트워크를 통해 다른 컴퓨팅 시스템으로부터 소프트웨어의 제1 부분의 실행 가능한 코드를 수신하고;
    상기 소프트웨어의 제1 부분의 실행 가능한 코드를 상기 제1 가상 메모리에 직접 기록하고;
    상기 제1 가상 메모리를 실행 가능하다고 표시하고;
    상기 제1 가상 메모리로부터 직접 상기 소프트웨어의 제1 부분의 실행 가능한 코드를 실행하고;
    상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된 소프트웨어의 제2 부분의 실행 가능한 코드를 다운로드하고;
    상기 소프트웨어의 제2 부분의 실행 가능 코드를 실행하도록 동작하는 시스템.
  17. 제16항에 있어서,
    상기 하나의 또는 그 이상의 프로세서들은 또한, 상기 명령들을 실행할 때, 상기 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 공유 라이브러리들을 로드하도록 동작하는 시스템.
  18. 제16항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 제1 컴퓨팅 디바이스에서 실행중인 브라우저에서 실행되는 클라이언트-측 스크립트인 시스템.
  19. 제18항에 있어서,
    상기 클라이언트-측 스크립트는 상기 브라우저에 의해 지원되는 외부 함수 인터페이스에 액세스하는 시스템.
  20. 제19항에 있어서,
    상기 브라우저는 모질라 파이어폭스(Mozilla Firefox)이고 상기 클라이언트-측 스크립트는 자바스크립트(JavaScript)인 시스템.
  21. 제18항에 있어서,
    상기 클라이언트-측 스크립트는 상기 제1 컴퓨팅 디바이스에 상주하는 외부 함수 라이브러리에 액세스하는 시스템.
  22. 제21항에 있어서,
    상기 외부 함수 라이브러리는 ctypes 라이브러리인 시스템.
  23. 제16항에 있어서,
    상기 하나의 또는 그 이상의 프로세서들은 또한, 상기 명령들을 실행할 때, 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제1 가상 메모리의 할당을 해제하도록 동작하는 시스템.
  24. 제16항에 있어서,
    상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 다운로드하고, 실행하는 것은
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 수신하는 것;
    데이터 스트림으로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 추출하는 것;
    제2 가상 메모리를 할당하는 것;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 상기 제2 가상 메모리에 직접 기록하는 것;
    상기 제2 가상 메모리를 실행 가능하다고 표시하는 것; 및
    상기 제2 가상 메모리로부터 직접 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 실행하는 것을 포함하는 시스템.
  25. 제24항에 있어서,
    상기 하나의 또는 그 이상의 프로세서들은 또한, 상기 명령들을 실행할 때,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 유효성 검사하고;
    제1 컴퓨팅 디바이스에 존재하는 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제1 공유 라이브러리들을 로드하고;
    제2 컴퓨팅 디바이스로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제2 공유 라이브러리들을 다운로드하도록 동작하는 시스템.
  26. 제24항에 있어서,
    상기 하나의 또는 그 이상의 프로세서들은 또한, 상기 명령들을 실행할 때, 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제2 가상 메모리의 할당을 해제하도록 동작하는 시스템.
  27. 제24항에 있어서,
    상기 하나의 또는 그 이상의 프로세서들은 또한, 상기 명령들을 실행할 때, 제1 컴퓨팅 디바이스의 운영 체제에 기초하여 상기 소프트웨어의 제2 부분을 결정하도록 동작하는 시스템.
  28. 제24항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 제2 컴퓨팅 디바이스로부터 수신되고;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 제3 컴퓨팅 디바이스로부터 수신되는 시스템.
  29. 제24항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드 및 상기 소프트웨어의 제2 부분의 실행 가능한 코드는 둘 다 제2 컴퓨팅 디바이스로부터 수신되는 시스템.
  30. 제24항에 있어서,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 데이터 스트림에 포함되어 있는 시스템.
  31. 소프트웨어를 수록한 하나의 또는 그 이상의 컴퓨터 판독 가능 기억 매체로서,
    상기 소프트웨어는, 제1 컴퓨터 시스템에 의해 실행될 때,
    제1 가상 메모리를 할당하고;
    통신 네트워크를 통해 다른 컴퓨팅 시스템으로부터 소프트웨어의 제1 부분의 실행 가능한 코드를 수신하고;
    상기 소프트웨어의 제1 부분의 실행 가능한 코드를 상기 제1 가상 메모리에 직접 기록하고;
    상기 제1 가상 메모리를 실행 가능하다고 표시하고;
    상기 제1 가상 메모리로부터 직접 상기 소프트웨어의 제1 부분의 실행 가능한 코드를 실행하고;
    상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된 소프트웨어의 제2 부분의 실행 가능한 코드를 다운로드하고;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 실행하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  32. 제31항에 있어서,
    상기 소프트웨어는 또한, 상기 제1 컴퓨터 시스템에 의해 실행될 때, 상기 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 공유 라이브러리들을 로드하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  33. 제31항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 제1 컴퓨팅 디바이스에서 실행중인 브라우저에서 실행되는 클라이언트-측 스크립트인 컴퓨터 판독 가능 기억 매체.
  34. 제33항에 있어서,
    상기 클라이언트-측 스크립트는 상기 브라우저에 의해 지원되는 외부 함수 인터페이스에 액세스하는 컴퓨터 판독 가능 기억 매체.
  35. 제34항에 있어서,
    상기 브라우저는 모질라 파이어폭스(Mozilla Firefox)이고 상기 클라이언트-측 스크립트는 자바스크립트(JavaScript)인 컴퓨터 판독 가능 기억 매체.
  36. 제33항에 있어서,
    상기 클라이언트-측 스크립트는 상기 제1 컴퓨팅 디바이스에 상주하는 외부 함수 라이브러리에 액세스하는 컴퓨터 판독 가능 기억 매체.
  37. 제36항에 있어서,
    상기 외부 함수 라이브러리는 ctypes 라이브러리인 컴퓨터 판독 가능 기억 매체.
  38. 제31항에 있어서,
    상기 소프트웨어는 또한, 상기 제1 컴퓨터 시스템에 의해 실행될 때, 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제1 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제1 가상 메모리의 할당을 해제하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  39. 제31항에 있어서,
    상기 수신된 소프트웨어의 제1 부분의 실행 가능한 코드에 의해 촉구된 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 다운로드하고, 실행하는 것은
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 수신하는 것;
    데이터 스트림으로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 추출하는 것;
    제2 가상 메모리를 할당하는 것;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 상기 제2 가상 메모리에 직접 기록하는 것;
    상기 제2 가상 메모리를 실행 가능하다고 표시하는 것; 및
    상기 제2 가상 메모리로부터 직접 상기 소프트웨어의 제2 부분의 실행 가능한 코드를 실행하는 것을 포함하는 컴퓨터 판독 가능 기억 매체.
  40. 제39항에 있어서,
    상기 소프트웨어는 또한, 상기 제1 컴퓨터 시스템에 의해 실행될 때,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드를 유효성 검사하고;
    제1 컴퓨팅 디바이스에 존재하는 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제1 공유 라이브러리들을 로드하고;
    제2 컴퓨팅 디바이스로부터 상기 소프트웨어의 제2 부분의 실행 가능한 코드에 의해 요구되는 하나의 또는 그 이상의 제2 공유 라이브러리들을 다운로드하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  41. 제39항에 있어서,
    상기 소프트웨어는 또한, 상기 제1 컴퓨터 시스템에 의해 실행될 때, 제1 컴퓨팅 디바이스에 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 흔적이 없도록, 상기 소프트웨어의 제2 부분의 실행 가능한 코드의 실행이 완료된 후에 상기 제2 가상 메모리의 할당을 해제하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  42. 제39항에 있어서,
    상기 소프트웨어는 또한, 상기 제1 컴퓨터 시스템에 의해 실행될 때, 제1 컴퓨팅 디바이스의 운영 체제에 기초하여 상기 소프트웨어의 제2 부분을 결정하도록 동작하는 컴퓨터 판독 가능 기억 매체.
  43. 제39항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드는 제2 컴퓨팅 디바이스로부터 수신되고;
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 제3 컴퓨팅 디바이스로부터 수신되는 컴퓨터 판독 가능 기억 매체.
  44. 제39항에 있어서,
    상기 소프트웨어의 제1 부분의 실행 가능한 코드 및 상기 소프트웨어의 제2 부분의 실행 가능한 코드는 둘 다 제2 컴퓨팅 디바이스로부터 수신되는 컴퓨터 판독 가능 기억 매체.
  45. 제39항에 있어서,
    상기 소프트웨어의 제2 부분의 실행 가능한 코드는 데이터 스트림에 포함되어 있는 컴퓨터 판독 가능 기억 매체.
KR1020137024462A 2011-02-22 2012-02-22 소프트웨어 애플리케이션 전달 및 개시 시스템 KR101557211B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/031,747 US10114660B2 (en) 2011-02-22 2011-02-22 Software application delivery and launching system
US13/031,747 2011-02-22
PCT/US2012/026125 WO2012116068A2 (en) 2011-02-22 2012-02-22 Software application delivery and launching system

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020157006695A Division KR101759801B1 (ko) 2011-02-22 2012-02-22 소프트웨어 애플리케이션 전달 및 개시 시스템

Publications (2)

Publication Number Publication Date
KR20130124974A KR20130124974A (ko) 2013-11-15
KR101557211B1 true KR101557211B1 (ko) 2015-10-02

Family

ID=46653644

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157006695A KR101759801B1 (ko) 2011-02-22 2012-02-22 소프트웨어 애플리케이션 전달 및 개시 시스템
KR1020137024462A KR101557211B1 (ko) 2011-02-22 2012-02-22 소프트웨어 애플리케이션 전달 및 개시 시스템

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020157006695A KR101759801B1 (ko) 2011-02-22 2012-02-22 소프트웨어 애플리케이션 전달 및 개시 시스템

Country Status (8)

Country Link
US (2) US10114660B2 (ko)
EP (1) EP2678776B1 (ko)
JP (2) JP5711394B2 (ko)
KR (2) KR101759801B1 (ko)
CN (1) CN103443764A (ko)
AU (2) AU2012220706B2 (ko)
CA (1) CA2827909C (ko)
WO (1) WO2012116068A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436487B2 (en) * 2012-03-29 2016-09-06 Adobe Systems Incorporated Method and apparatus for creating a platform agnostic application file
CN103365675A (zh) * 2012-04-02 2013-10-23 鸿富锦精密工业(深圳)有限公司 试用软件处理系统及方法
WO2014065643A1 (en) * 2012-10-25 2014-05-01 Ventspils Augstskola A method for managing a software defined radio device installed on a small satellite
US9215075B1 (en) 2013-03-15 2015-12-15 Poltorak Technologies Llc System and method for secure relayed communications from an implantable medical device
US9288225B1 (en) * 2013-04-17 2016-03-15 Ca, Inc. Server port sharing based on shared socket
CN108351792A (zh) * 2016-01-15 2018-07-31 谷歌有限责任公司 使用应用容器管理代码和依赖性数据的传递
JP6537481B2 (ja) * 2016-10-05 2019-07-03 キヤノン株式会社 放射線撮像装置及び放射線撮像システム
CN108509203B (zh) * 2018-03-13 2021-05-28 腾讯科技(深圳)有限公司 软件跨云部署方法、计算机设备及存储介质
US11188353B2 (en) * 2018-07-12 2021-11-30 Vmware, Inc. Runtime extension system for bundled web application
US11947989B2 (en) * 2020-02-14 2024-04-02 SparkCognition, Inc. Process flow for model-based applications
CN111913755B (zh) * 2020-07-07 2024-04-02 海信视像科技股份有限公司 一种应用程序的扫描方法和显示设备

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870609A (en) 1993-12-17 1999-02-09 Xircom, Inc. Technique for bootstrapping executable code to an adapter
FR2738367B1 (fr) 1995-09-05 1997-10-17 Scm Microsystems Procede et appareil de telechargement rapide de fonctions dans une memoire volatile
US5829013A (en) 1995-12-26 1998-10-27 Intel Corporation Memory manager to allow non-volatile memory to be used to supplement main memory
US6052780A (en) 1996-09-12 2000-04-18 Open Security Solutions, Llc Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
US6226665B1 (en) 1996-09-19 2001-05-01 Microsoft Corporation Application execution environment for a small device with partial program loading by a resident operating system
US5841870A (en) * 1996-11-12 1998-11-24 Cheyenne Property Trust Dynamic classes of service for an international cryptography framework
US20010044850A1 (en) 1998-07-22 2001-11-22 Uri Raz Method and apparatus for determining the order of streaming modules
CZ2001721A3 (cs) 1998-08-27 2002-05-15 International Business Machines Corporation Systém a způsob pro vkládání dodatečných informací do video dat
US6570926B1 (en) 1999-02-25 2003-05-27 Telcordia Technologies, Inc. Active techniques for video transmission and playback
US6637023B1 (en) 1999-03-03 2003-10-21 Microsoft Corporation Method and system for updating read-only software modules
US7188186B1 (en) 1999-09-03 2007-03-06 Meyer Thomas W Process of and system for seamlessly embedding executable program code into media file formats such as MP3 and the like for execution by digital media player and viewing systems
US6493871B1 (en) 1999-09-16 2002-12-10 Microsoft Corporation Method and system for downloading updates for software installation
US6976062B1 (en) * 1999-09-22 2005-12-13 Intermec Ip Corp. Automated software upgrade utility
EP1292892A4 (en) 2000-04-14 2006-11-15 Goahead Software Inc SYSTEM AND METHOD FOR UPGRADING NETWORKED EQUIPMENT
US6598130B2 (en) * 2000-07-31 2003-07-22 Hewlett-Packard Development Company, L.P. Technique for referencing distributed shared memory locally rather than remotely
US7051315B2 (en) * 2000-09-26 2006-05-23 Appstream, Inc. Network streaming of multi-application program code
US7039116B1 (en) 2000-11-07 2006-05-02 Cisco Technology, Inc. Methods and apparatus for embedding and format conversion of compressed video data
US20020129107A1 (en) * 2001-03-12 2002-09-12 Loughran Stephen A. Method and apparatus for automatic content handling
US7861303B2 (en) 2001-08-01 2010-12-28 Mcafee, Inc. Malware scanning wireless service agent system and method
US8621077B2 (en) * 2001-09-21 2013-12-31 Mcafee, Inc. Distribution of security policies for small to medium-sized organizations
US7203940B2 (en) 2002-04-29 2007-04-10 Hewlett-Packard Development Company, Lp. Automated installation of an application
US20040010587A1 (en) 2002-07-09 2004-01-15 Arturo Altamirano Method and apparatus for displaying real time graphical and digital wellbore information responsive to browser initiated client requests via the internet
AU2003242768A1 (en) 2002-08-02 2004-02-25 Telefonaktiebolaget Lm Ericsson (Publ) Optimised code generation
WO2004092897A2 (en) 2003-04-11 2004-10-28 Mirra, Inc. Service platform application distribution manager
US7735057B2 (en) 2003-05-16 2010-06-08 Symantec Corporation Method and apparatus for packaging and streaming installation software
CN101241735B (zh) 2003-07-07 2012-07-18 罗威所罗生股份有限公司 重放加密的视听内容的方法
US7886287B1 (en) 2003-08-27 2011-02-08 Avaya Inc. Method and apparatus for hot updating of running processes
US7673297B1 (en) 2003-09-03 2010-03-02 The Directv Group, Inc. Automatic software update detection and flexible installer for set-top boxes
US8868933B2 (en) * 2004-03-26 2014-10-21 Absolute Software Corporation Persistent servicing agent
US7735136B2 (en) 2005-04-18 2010-06-08 Vmware, Inc. 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security
US20060282620A1 (en) * 2005-06-14 2006-12-14 Sujatha Kashyap Weighted LRU for associative caches
US20070180061A1 (en) * 2006-02-02 2007-08-02 International Business Machines Corporation Methods and apparatus for interactive specification of context-sensitive sevice level agreements; for provisioning of resources required during service delivery events regulated by service level agreements; and for monitoring compliance with service level agreements during service delivery events
WO2007101877A1 (de) * 2006-03-08 2007-09-13 Siemens Home And Office Communication Devices Gmbh & Co. Kg Verfahren und konfigurations-softwareaktualisierungsserver zum übertragen von daten zwischen einem kundengerät und dem server
US8538808B2 (en) * 2006-12-14 2013-09-17 Yahoo! Inc. Creative audit system
US20080201705A1 (en) * 2007-02-15 2008-08-21 Sun Microsystems, Inc. Apparatus and method for generating a software dependency map
WO2008121345A1 (en) 2007-03-29 2008-10-09 Christopher Murphy Methods and systems for internet security via virtual software
US8185886B2 (en) 2007-06-26 2012-05-22 Intel Corporation Method and apparatus to enable dynamically activated firmware updates
US20090083474A1 (en) 2007-09-21 2009-03-26 Thomas Cooke File allocation table management
US8365153B2 (en) * 2007-10-26 2013-01-29 Qualcomm Incorporated Server-based code compilation
KR100936239B1 (ko) 2007-12-18 2010-01-12 한국전자통신연구원 스트리밍 기반 이동형 소프트웨어 제공 시스템 및 방법
US20090172637A1 (en) 2007-12-28 2009-07-02 Microsoft Corporation Markup-based language for manifests
US20090183182A1 (en) * 2008-01-10 2009-07-16 Microsoft Corporation Dynamic Composition of Virtualized Applications
US8346897B2 (en) 2008-02-25 2013-01-01 Jon Jaroker System and method for deploying and maintaining software applications
US8839227B2 (en) 2008-02-29 2014-09-16 Arris Enterprises, Inc. Preventing overwrite of nonessential code during essential code update
US20090248524A1 (en) * 2008-03-26 2009-10-01 Jonathan Defoy Systems, methods and apparatus for the display of advertisements in a software application
EP2274674A1 (en) 2008-04-25 2011-01-19 VMWare, Inc. Linking virtualized application namespaces at runtime
US8424082B2 (en) 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
WO2010002407A1 (en) * 2008-07-02 2010-01-07 Hewlett-Packard Development Company, L.P. Performing administrative tasks associated with a network-attached storage system at a client
US8745601B1 (en) * 2008-07-17 2014-06-03 Apple Inc. Methods and systems for using data structures for operating systems
US8776038B2 (en) 2008-08-07 2014-07-08 Code Systems Corporation Method and system for configuration of virtualized software applications
US9049478B2 (en) 2009-04-08 2015-06-02 Dialogic Corporation System and method for implementing a dynamic media link
US20110047540A1 (en) 2009-08-24 2011-02-24 Embarcadero Technologies Inc. System and Methodology for Automating Delivery, Licensing, and Availability of Software Products
US8863108B2 (en) * 2010-11-23 2014-10-14 Red Hat, Inc. Finding out if software will run on an operating system without installing that software

Also Published As

Publication number Publication date
KR20130124974A (ko) 2013-11-15
US20190042283A1 (en) 2019-02-07
CN103443764A (zh) 2013-12-11
JP5711394B2 (ja) 2015-04-30
NZ614445A (en) 2015-03-27
CA2827909A1 (en) 2012-08-30
KR20150036822A (ko) 2015-04-07
KR101759801B1 (ko) 2017-07-31
US10114660B2 (en) 2018-10-30
JP5916002B2 (ja) 2016-05-11
EP2678776B1 (en) 2022-08-31
AU2012220706B2 (en) 2015-07-16
JP2014509013A (ja) 2014-04-10
US20120215831A1 (en) 2012-08-23
AU2012220706A1 (en) 2013-09-12
CA2827909C (en) 2018-02-27
EP2678776A2 (en) 2014-01-01
WO2012116068A3 (en) 2012-11-01
WO2012116068A2 (en) 2012-08-30
AU2015243038B2 (en) 2017-08-17
JP2015122115A (ja) 2015-07-02
NZ705843A (en) 2016-09-30
EP2678776A4 (en) 2015-04-15
AU2015243038A1 (en) 2015-11-05

Similar Documents

Publication Publication Date Title
KR101557211B1 (ko) 소프트웨어 애플리케이션 전달 및 개시 시스템
US9195449B1 (en) Stream-based software application delivery and launching system
US9185513B1 (en) Method and system for compilation with profiling feedback from client
CN113110849A (zh) 按需加载资源
AU2014203156B2 (en) Stream-based software application delivery and launching system
NZ614445B2 (en) Software application delivery and launching system
NZ705843B2 (en) Software application delivery and launching system
CN116204749A (zh) 页面加载方法、装置、电子设备及存储介质
Michéle et al. Media Playback System

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180906

Year of fee payment: 4