KR101872141B1 - 확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트 - Google Patents

확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트 Download PDF

Info

Publication number
KR101872141B1
KR101872141B1 KR1020167032361A KR20167032361A KR101872141B1 KR 101872141 B1 KR101872141 B1 KR 101872141B1 KR 1020167032361 A KR1020167032361 A KR 1020167032361A KR 20167032361 A KR20167032361 A KR 20167032361A KR 101872141 B1 KR101872141 B1 KR 101872141B1
Authority
KR
South Korea
Prior art keywords
extension
application
extensions
point
content
Prior art date
Application number
KR1020167032361A
Other languages
English (en)
Other versions
KR20160147862A (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 애플 인크.
Priority claimed from PCT/US2015/028203 external-priority patent/WO2015183456A1/en
Publication of KR20160147862A publication Critical patent/KR20160147862A/ko
Application granted granted Critical
Publication of KR101872141B1 publication Critical patent/KR101872141B1/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/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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)

Abstract

일 실시예에 따르면, 운영 체제의 복수의 확장 포인트들 중 제1 확장 포인트와 연관된 확장 서비스에 대해 제1 애플리케이션 - 제1 애플리케이션은 제1 샌드박스 환경 내에서 실행됨 - 으로부터 수신된 질의에 응답하여, 제1 확장 포인트에 대해 운영 체제에 등록된 하나 이상의 확장자들의 리스트가 식별된다. 확장자들의 식별된 리스트는 사용자가 확장자들 중에서 제1 애플리케이션과 연관될 하나의 확장자를 선택하도록 프롬프트하기 위해 디스플레이된다. 확장자들 중 하나의 확장자의 선택에 응답하여, 선택된 확장자는 제2 샌드박스 환경에서 론칭된다. 선택된 확장자 및 제2 애플리케이션은 애플리케이션 번들로 패키징되었고, 애플리케이션 번들이 인스톨된 경우, 선택된 확장자 및 제2 애플리케이션은 운영 체제의 레지스트리에서 개별 애플리케이션들로 나타난다.

Description

확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트{CONSISTENT EXTENSION POINTS TO ALLOW AN EXTENSION TO EXTEND FUNCTIONALITY OF AN APPLICATION TO ANOTHER APPLICATION}
관련 출원
본 출원은 모두가 2014년 5월 29일자로 출원된 미국 가특허 출원 제62/004,777호, 제62/004,778호, 및 제62/004,780호의 이점을 주장한다. 본 출원은 또한 2014년 9월 16일자로 출원된 미국 특허 출원 제14/488,122호(대리인 관리 번호: 4860P22650) 및 제14/488,126호(대리인 관리 번호: 4860P23308)에 관련된다. 상기에 명시된 출원들의 개시내용은 전체적으로 본 명세서에 참고로 포함된다.
기술 분야
본 발명의 실시예들은 대체로 데이터 프로세싱 시스템의 운영 체제에 관한 것이다. 더 구체적으로, 본 발명의 실시예들은 하나의 애플리케이션의 기능을 다른 애플리케이션으로 확장하기 위한 고정적 확장 포인트들을 제공하는 것에 관한 것이다.
모든 타입들의 프로세서 기반 전자 디바이스들, 및 구체적으로, 컴퓨팅 디바이스들에 대한 보안 문제들은 중요한 문제가 되어 왔다. 일부 문제들이 그러한 디바이스들에 의해 구현된 결함 코드에 의해 착수될 수 있는 유해한 동작들에 관련될 수 있지만, 더 큰 문제들은 "바이러스", "웜", "트로이 목마", "스파이웨어", "애드웨어" 등등을 비롯한 다수의 명칭들로 본 기술 분야에 통상적으로 공지되어 있는 코드를 포함하는 악성 코드를 통해 그러한 디바이스들에 대해 이루어진 다양한 타입들의 공격들의 영향들에 관한 것이다. 그러한 악성 코드는 스크린 상에 메시지들을 디스플레이하거나 디바이스의 제한적 기능들을 제어하는 것과 같은 상대적으로 유순한 것으로부터 디바이스를 완전히 제어하는 것, 프로세스들을 구동하는 것, 파일들을 송신 및/또는 삭제하는 것 등과 같은 상당히 파괴적인 것에 이르는 효과들을 가질 수 있다. 사실상, 프로세서 기반 디바이스 상에서의 임의의 타입의 상상할 수 있는 동작은 악성 코드에 의한 공격들의 대상이 되어 왔다.
이들 공격들 중 많은 것이 컴퓨팅 디바이스들, 예컨대 워크스테이션들, 서버들, 데스크톱 컴퓨터들, 노트북 및 핸드헬드 컴퓨터들, 및 기타 유사한 디바이스들을 겨냥한다. 이들 컴퓨팅 디바이스들 중 많은 것이, 사용자가 소정 세트의 희망 기능들을 수행하도록 동작시킬 수 있는 하나 이상의 애플리케이션 프로그램들을 구동할 수 있다. 그러나, 그러한 공격들은 그러한 컴퓨팅 디바이스들로 제한되지 않는다. 더 넓은 그룹의 다양한 타입들의 디바이스들, 예컨대 셀룰러 전화기들; 개인용 디지털 단말기(personal digital assistant, "PDA")들; 음악 및 비디오 플레이어들; 네트워크 라우터들, 스위치들 또는 브리지들; 및 마이크로프로세서, 마이크로제어기, 또는 디지털 신호 프로세서를 사용하여 코딩된 명령어들을 실행시키는 다른 디바이스들이 악성 코드에 의한 공격들의 대상이 되어 왔다.
한 가지 특성 상황에서, 브라우저 애플리케이션과 같은 하나의 애플리케이션은 제3자에 의해 개발될 수 있는 플러그인(애플리케이션 확장자로도 지칭됨)을 호출해야 할 수도 있다. 전형적으로, 애플리케이션이 애플리케이션(호스트 애플리케이션으로도 지칭됨)과 연관된 플러그인을 호출하는 경우에, 운영 체제는 도 1에 도시된 바와 같이 애플리케이션의 동일한 프로세스 어드레스 공간 내의 플러그인을 론칭한다. 도 1을 참조하면, 애플리케이션(104)이 플러그인(105)을 호출하는 경우에, 애플리케이션 관리자(101)의 애플리케이션 론칭 모듈(102)이 애플리케이션(104)의 동일한 프로세스 어드레스 공간(106) 내의 플러그인(105)을 로딩한다. 애플리케이션(104) 및 그의 플러그인(105)이 동일한 어드레스 공간(106) 내에서 구동되는 중이므로, 플러그인(105)은 애플리케이션(104)에 의해 액세스가능한 리소스들에 액세스할 수 있으며, 여기서 리소스들은 리소스 관리자(103)에 의해 관리될 수 있다. 리소스 관리자(103)의 시점으로부터, 애플리케이션(104) 및 플러그인(105)은 동일한 프로세스이다. 그것은, 플러그인(105)이 멀웨어(malware)인 것으로 판명되는 경우, 애플리케이션(104)이 취약해지게 할 수 있다.
예를 들어, 플러그인(105)이 애플리케이션(104)에 대해 개발된 제3자 플러그인인 경우에, 그리고 애플리케이션(104)이 로컬 저장소 및 네트워크에 액세스할 수 있는 경우에, 플러그인(105)은 로컬 저장소 및 네트워크에 저장된 파일들을 부당하게 활용 및 공격할 수 있다. 게다가, 플러그인(105)이 멀웨어가 아니라 하더라도, 플러그인(105)이 충돌하는 경우에, 그것은 애플리케이션(104)을 붕괴시키거나 애플리케이션이 오작동하게 할 수 있다. 더욱이, 플러그인(105)이 론칭 모듈(102)에 의해 종료되는 경우, 플러그인(105)의 종료는 애플리케이션(104)이 불안정해지게 할 수 있는데, 이는 그들이 동일한 프로세스 어드레스 공간(106)에 있기 때문이다.
종래의 시스템은 2개의 애플리케이션들 사이의 프로세스간 통신을 위한 커스텀화된 URL(universal resource locator) 방식을 이용하는데, 이는 발견가능성(discoverability) 제한들, 보안 문제들, 및 양방향 통신이 곤란하고 손상되기 쉬운 대체적인 가요성 결여를 겪는다. URL 방식들은 애플리케이션이 호스트 애플리케이션으로 스위칭하게 할 수 있는데, 이는 사용자를 개시 애플리케이션 외부로 이동시킬 수 있고 시각적 콘텍스트 및 연관된 워크플로우 중 임의의 것을 파괴할 수 있다. 그러한 상황을 검출하는 것은 매우 어렵다.
악성 코드 또는 결함 코드의 공격 및 영향 양측 모두를 감소시키거나 제거하고자 하는 시도 시에 다수의 방법들이 이용되어 왔다. 대체로, 이들 방법들은 검출, 방지, 및 완화를 포함한다. 구체적으로, 이들 방법들은 (바이러스 방지 소프트웨어 등의 목적인 것과 같이) 악성 코드가 시스템에 도입되기 전 또는 악성 코드가 해를 끼치기 전에 악성 코드를 스캐닝, 식별, 격리, 및 가능하게는 삭제하고자 하는 시도들로부터 악성 코드 또는 결함 코드에 의해 영향을 받는 프로세스들에 의해 취해질 수 있는 동작들을 제한하거나 포함하는 것에 이른다. 그러나, 다른 애플리케이션을 안전한 방식으로 호출하는 애플리케이션과 연관된 플러그인을 처리하기 위한 효율적인 방법들이 부족했다.
본 발명의 실시예들은 첨부 도면의 도면들에 제한이 아닌 예로서 도시되며, 도면에서 유사한 도면 부호들은 유사한 요소들을 나타낸다.
도 1은 데이터 프로세싱 시스템의 종래의 운영 체제를 도시한 블록 다이어그램이다.
도 2a 및 도 2b는 본 발명의 소정 실시예들에 따른, 애플리케이션 확장자들을 관리하기 위한 시스템 아키텍처를 도시한 블록 다이어그램들이다.
도 2c는 본 발명의 일 실시예에 따른, 애플리케이션 및 애플리케이션 확장자를 실행시키기 위한 방법을 도시한 흐름도이다.
도 3a 및 도 3b는 본 발명의 소정 실시예들에 따른 운영 체제의 아키텍처의 일례를 도시한 블록 다이어그램들이다.
도 4a는 본 발명의 일 실시예에 따른, 애플리케이션과 애플리케이션 확장자 사이의 통신 구성을 도시한 블록 다이어그램이다.
도 4b는 본 발명의 다른 실시예에 따른, 애플리케이션 확장자들을 처리하기 위한 방법을 도시한 흐름도이다.
도 5a는 본 발명의 일 실시예에 따른, 확장 포인트에 대한 확장자를 개발하기 위한 시스템을 도시한 블록 다이어그램이다.
도 5b는 본 발명의 일 실시예에 따른, 확장 포인트들에 대한 확장자들을 개발하기 위한 방법을 도시한 흐름도이다.
도 6a는 본 발명의 일 실시예에 따른, 확장 프레임워크의 등록 시스템을 도시한 블록 다이어그램이다.
도 6b는 본 발명의 일 실시예에 따른, 확장 포인트들을 통해 확장자들을 관리하기 위한 방법을 도시한 흐름도이다.
도 7a는 본 발명의 일 실시예에 따른 액션 확장 포인트의 일례를 도시한 블록 다이어그램이다.
도 7b는 본 발명의 일 실시예에 따른, 액션 확장 서비스를 제공하는 방법을 도시한 흐름도이다.
도 8a는 본 발명의 일 실시예에 따른, 콘텐츠 공유 서비스들을 제공하기 위한 공유 확장 포인트를 도시한 블록 다이어그램이다.
도 8b는 본 발명의 일 실시예에 따른, 공유 확장자를 사용하여 콘텐츠를 공유하기 위한 방법을 도시한 흐름도이다.
도 9는 본 발명의 일 실시예에 따른, 애플리케이션의 종료를 처리하기 위한 프로세스를 도시한 블록 다이어그램이다.
도 10은 본 발명의 일 실시예에 따른, 애플리케이션들의 각자의 확장자들을 통해 애플리케이션들에 액세스하기 위한 시스템을 도시한 블록 다이어그램이다.
도 11a 및 도 11b는 본 발명의 일 실시예에 따른, 애플리케이션의 그래픽 사용자 인터페이스의 일례를 도시한 스크린샷들이다.
도 12a 내지 도 12c는 본 발명의 일 실시예에 따른, 애플리케이션의 그래픽 사용자 인터페이스의 일례를 도시한 스크린샷들이다.
도 13은 본 발명의 일 실시예에서 사용될 수 있는 데이터 프로세싱 시스템의 일례를 도시한 블록 다이어그램이다.
본 발명들의 다양한 실시예들 및 태양들은 아래에 논의된 상세사항들을 참조하여 설명될 것이고, 첨부된 도면들은 다양한 실시예들을 도시할 것이다. 하기의 설명 및 도면들은 본 발명을 예시하며, 본 발명을 제한하는 것으로 해석되어서는 안 된다. 많은 특정 세부사항들이 본 발명의 다양한 실시예들의 철저한 이해를 제공하기 위해 기술된다. 그러나, 특정 예들에서, 주지된 또는 종래의 상세사항들은 본 발명들의 실시예들의 간결한 논의를 제공하기 위해 설명되지 않는다.
본 명세서에서의 "하나의 실시예" 또는 "일 실시예"에 대한 언급은 그 실시예와 관련하여 기술된 특정한 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함될 수 있음을 의미한다. 본 명세서 내의 여러 곳에 나오는 문구 "일 실시예에서"는 반드시 모두 동일한 실시예를 언급하는 것은 아니다.
본 발명의 일 태양에 따르면, 애플리케이션 확장자(플러그인 또는 간단히 확장자로도 지칭됨) 및 애플리케이션 확장자를 호스팅하는 애플리케이션이 개별 프로세스 어드레스 공간들에 로딩되어 그 내부에서 실행되고, 운영 체제에 의해 개별 프로세스들처럼 처리된다. 일 실시예에서, 애플리케이션 확장자를 호스팅하는 애플리케이션이 제1 샌드박스 환경(sandboxed environment)에서 론칭되어 실행되고, 애플리케이션 확장자가 제2 샌드박스 환경에서 론칭되어 실행된다. 제1 샌드박스 환경 및 제2 샌드박스 환경은 제1 보안 또는 샌드박스 프로파일 및 제2 보안 또는 샌드박스 프로파일에 각각 기초하여 구성된다. 애플리케이션 및 애플리케이션 확장자는 IPC(inter-process communication) 프레임워크를 통해 서로 통신한다. 운영 체제는 보안을 강화하며, 제1 및 제2 보안 프로파일들에 기초하여 개별적으로 또는 독립적으로 애플리케이션 및 애플리케이션 확장자의 리소스들을 각각 관리한다.
일 실시예에 따르면, 애플리케이션 확장자가 사용자에게 디스플레이될 콘텐츠, 예컨대 GUI(graphical user interface) 콘텐츠를 생성하는 경우, 동일한 프로세스 어드레스 공간 내에서 구동되는 애플리케이션 확장자를 필요로 하는 API(application programming interface)를 통해 애플리케이션이 애플리케이션 확장자에 직접 액세스하게 하지 않고서, 콘텐츠가 IPC 프레임워크를 통해 애플리케이션 내에 주입되고 사용자에게 제시된다. 구체적으로, 원격 뷰 제어기가 애플리케이션 및 애플리케이션 확장자 각각 내에 내장되어, 애플리케이션 확장자에 의해 렌더링되는 GUI 콘텐츠를 애플리케이션 내에 주입한다. 애플리케이션 및 애플리케이션 확장자 내에서 (또는 이와 연관되어) 구동되는 원격 뷰 제어기들은 애플리케이션과 애플리케이션 확장자 사이에서 GUI 콘텐츠와의 사용자 상호작용을 동기화시키도록 구성된다.
다른 실시예에 따르면, 애플리케이션 및 애플리케이션 확장자가 그들의 각자의 프로세스 어드레스 공간들 내에서 구동되는 중이므로, 애플리케이션 및 애플리케이션 확장자와 연관된 리소스들은 다른 상대자에 대해 상당한 간섭을 야기하지 않고서 독립적으로 관리될 수 있다. 예를 들어, 애플리케이션 확장자는 애플리케이션의 동작들에 영향을 미치지 않고서 셧다운 또는 종료될 수 있는데, 이는 그 둘 사이의 통신이 IPC 프레임워크에 의해 관리되기 때문이다. 애플리케이션 및 애플리케이션 확장자 중 하나가 업그레이드 또는 종료될 필요가 있는 경우, 일 실시예에 따르면, 다른 상대자는 운영 체제와 통신하여, 사용자가 그 다른 상대자를 현재 이용하는 중인지 여부를 판정하여 그것이 자체를 업그레이드 또는 종료하는 데 안전한지 여부를 판정할 수 있다. 예를 들어, 애플리케이션을 업그레이드하기 위한 업그레이드 요청이 수신되는 경우, 애플리케이션 또는 업그레이드 관리자는 중앙 당국(예컨대, 윈도우 서버)과 통신하여, 사용자가 애플리케이션 확장자의 사용자 인터페이스에 동시에 액세스하는 중인지 여부를 판정할 수 있다. 애플리케이션의 업그레이드 또는 종료는 사용자가 애플리케이션 확장자를 현재 이용하지 않는 중인 것으로 판정되는 경우에만 수행되고; 그렇지 않은 경우에는 요청이 거절된다.
다른 실시예에 따르면, 애플리케이션 확장자가 운영 체제에 의해 인스톨된 경우, 애플리케이션 확장자를 활성화/인에이블 또는 비활성화/디스에이블시키도록 하는 옵션이 사용자에게 제공된다. 예를 들어, 운영 체제의 애플리케이션 제어 센터(예컨대, 통지 센터)에 대한 인스톨된 애플리케이션의 인스톨된 애플리케이션 확장자는 호스팅 애플리케이션으로서 애플리케이션 제어 센터의 사용자 인터페이스 내에 디스플레이될 수 있다. 애플리케이션 제어 센터의 사용자 인터페이스는 사용자가 인스톨된 애플리케이션 확장자를 인에이블 또는 디스에이블시키게 하는 인에이블/디스에이블 옵션(예컨대, 아이콘과 같은 스위치 그래픽 표현)을 디스플레이할 수 있다. 애플리케이션 확장자는 애플리케이션 확장자가 인에이블된 경우에만 (예컨대, 연관된 인스톨된 애플리케이션의 기능들을 이용하기 위해) 애플리케이션 제어 센터로부터 액세스가능하고; 그렇지 않은 경우에, 사용자는 애플리케이션 확장자와 연관된 인스톨된 애플리케이션을 이용해야 한다. 애플리케이션 제어 센터는 다양한 애플리케이션들의 확장자들로 후킹(hook)될 수 있으며, 각각의 확장자는 개별적으로 구성(예컨대, 인에이블 또는 디스에이블)될 수 있다. 따라서, 애플리케이션 제어 센터는 다양한 애플리케이션들의 기능들에 액세스하기 위한 중앙집중식 엔트리 포인트로서의 역할을 한다. 그 결과, 애플리케이션 제어 센터에서 호스팅 및 인에이블된 확장자들에 의해, 사용자는 개별적으로 애플리케이션들을 론칭하고 그에 액세스할 필요가 없다.
본 발명의 다른 태양에 따르면, 확장 프레임워크는 본 명세서에서 확장 포인트들로 지칭되는 소정 세트의 확장 인터페이스들을 포함하여, 제1 애플리케이션이 제2 애플리케이션의 확장자를 호출하여, 확장자에 의해 확장되는 제2 애플리케이션과 연관된 소정 세트의 사전정의된 기능들에 액세스하게 한다. 소정 세트의 확장 포인트들은 운영 체제와 연관되는 보편적으로 사용되거나 대중적인 다양한 기능들 또는 서비스들을 포함할 수 있다. 확장 포인트는 제1 애플리케이션 또는 제2 애플리케이션 중 어느 하나인 클라이언트가 다른 클라이언트로부터의/로의 서비스에 액세스하거나 그를 제공하게 하는 소정 세트의 사전정의된 API들 또는 통신 프로토콜들을 정의한다. 확장 포인트에 의해 제공되는 서비스가 운영 체제의 표준 컴포넌트에 의해 제공될 수 있거나, 또는 제3자 기능이 제3자 벤더에 의해 제공될 수 있다.
일 실시예에서, 확장 프레임워크는 2개의 프로세스들(예컨대, 확장자와 호스트 애플리케이션) 사이의 접속 오퍼레이터로서 동작한다. 확장 프레임워크는 발견 양태를 제공하고, 보안 도메인을 확장한다. 제1 애플리케이션이 다른 애플리케이션에 의해 제공되는 사전정의된 기능(예컨대, 콘텐츠 공유 또는 사진 필터링)에 액세스하기를 원하는 경우, 제1 애플리케이션은 그러한 서비스를 제공할 수 있는 자에 관해서 알아보도록 해당 사전정의된 기능과 연관된 대응하는 확장 포인트와 통신한다. 이어서, 확장 프레임워크는 확장 프레임워크에 등록된 다른 애플리케이션들에 의해 제공되는 하나 이상의 확장자들의 리스트를 검색 및 식별하여, 요청된 서비스를 제공한다. 확장 프레임워크는 식별된 확장자들의 리스트를 반환하여, 제1 애플리케이션이 리스트 내의 제2 애플리케이션들 중 요청된 서비스에 대한 제2 애플리케이션을 선택하게 할 수 있다. 확장자들 중에서 제2 애플리케이션에 의해 제공될 수 있거나 그와 연관될 수 있는 확장자의 선택에 응답하여, 확장 프레임워크는 선택된 확장자를 개별 샌드박스 환경에서 론칭하고, 제1 애플리케이션과 선택된 확장자 사이에서의 IPC 메커니즘 또는 프레임워크를 가능하게 하여, 제1 애플리케이션이 IPC 통신 메커니즘을 통해, 선택된 확장자의 기능들에 액세스하게 한다.
일 실시예에 따르면, 확장 포인트는 소프트웨어 개발자를 위한 확장자에 대한 인터페이스로서 동작하고, 확장자가 동작하는 도메인을 제공한다. 각각의 확장 포인트는 사전정의된 세트의 정책들(예컨대, 리소스 권한(entitlement)들 또는 제한들)과 연관되고, 호스트 애플리케이션과 확장자 사이에서 교환될 수 있는 메시지들을 특정한다. 특정 확장 포인트에 대해 설계된 모든 확장자들은 해당 특정 확장 포인트의 사전정의된 정책들에서 설명되는 사양에 부합해야 한다. 모든 확장자들은, 운영 환경에서 실행 시, 연관된 확장 포인트에 의해 정의되는 동일한 세트의 운영 환경 파라미터들에 대해 권한을 부여받거나 그에 의해 제한된다. 제2 애플리케이션의 확장자가 개발되는 경우, 개발자는 소프트웨어 개발 키트(software development kit, SDK)의 일부로서 해당 특정 확장 포인트와 연관된 확장 템플릿을 이용하여, 본 명세서에서 컨테이너 애플리케이션으로 지칭되는 제2 애플리케이션 및 연관된 확장자 양측 모두의 실행가능한 이미지들을 생성할 수 있다. 확장자 및 컨테이너 애플리케이션은 번들로 배포될 수 있다. 번들은 컨테이너 애플리케이션 및 컨테이너 애플리케이션을 설명하는 그의 메타데이터와, 확장자 및 확장자를 설명하는 그의 메타데이터를 포함한다. 그러나, 컨테이너 애플리케이션 및 확장자는 개별 샌드박스 환경들에서 론칭될 수 있고 독립적으로 동작될 수 있는데, 이들은 공통 라이브러리 또는 프레임워크에 액세스할 수 있거나 그를 공유할 수 있지만 그들의 각자의 메타데이터 및/또는 대응하는 확장 포인트에 기초하여 구성될 수도 있다.
본 발명의 다른 태양에 따르면, 등록된 확장자들 중 일부는 운영 체제의 일부분으로서 제공될 수 있고; 다른 것들은 제3자들에 의해 제공될 수 있고 운영 체제의 인스톨러에 의해 인스톨될 수 있다. 일 실시예에 따르면, 초기에 인스톨 또는 등록된 확장자의 구 버전은 동일한 확장자 제공자에 의해 제공되는 동일한 확장자의 신 버전으로 대체 또는 치환(override)될 수 있다. 인스톨 또는 등록 프레임워크는 확장자 제공자를 인증하여, 인가된 확장자 제공자만이 현재 인스톨되어 있는 확장자를 대체 또는 치환할 수 있음을 보장한다. 일 실시예에서, 특정 확장자의 인가된 소유주만이 그의 소유의 인스톨된 확장자를 대체할 수 있다.
확장자가 인스톨되는 중인 경우, 확장자의 타입(예컨대, UTI(uniform type identifier)에 의해 식별됨) 및 확장자 제공자 ID에 기초하여, 인스톨러가 확장 레지스트리를 검색하여 현재 인스톨되어 있는 동일한 확장자의 초기 버전이 있는지 여부를 판정한다. 인스톨된 초기 버전이 있는 경우, 인스톨러는 확장 레지스트리 내의 확장 키를 새로운 확장자로부터 획득된 새로운 확장 키로 대체한다. 확장 키는 확장자의 특정 버전을 나타낸다. 이어서, 확장자를 호출하기 위한 요청이 호스트 애플리케이션으로부터 수신되는 경우, 확장자의 신 버전이 새로운 확장 키에 기초하여 식별 및 론칭될 것이다.
일 실시예에서, 확장 프레임워크에 의해 제공되는 확장 포인트들 중 하나는 콘텐츠를 커뮤니티에서 또는 다른 사용자와 공유하도록 설계된 공유 확장 포인트이다. 공유 확장 포인트에 의해, 애플리케이션은 공유 애플리케이션, 예컨대 Twitter® 및 Facebook®의 공유 기능을 확장하는 공유 확장자를 호출하여, 콘텐츠를 소셜 웹사이트 상에서 또는 다른 프로그램과 공유할 수 있다. 전술된 바와 같이, 공유 확장자를 호출하기 위해, 공유 확장자는 확장 프레임워크에 인스톨 또는 등록되어야 한다. 전형적으로, 공유 확장자는, 예를 들어 콘텐츠 공유 서비스들을 위해 사전동의된 UTI와 연관된 UTI에 등록함으로써, 확장자가 콘텐츠 공유 서비스들을 제공할 수 있음을 나타내는 시스템에 등록되어야 할 것이다.
브라우저와 같은 호스트 애플리케이션이 콘텐츠 공유 서비스를 호출하고자 시도하는 경우, 예를 들어 사용자로부터 수신된 "공유" 커맨드에 응답하여, 호스트 애플리케이션은 콘텐츠 공유 서비스들과 연관된 적절한 UTI를 제공함으로써 확장 프레임워크의 공유 확장 포인트와 통신한다. 이에 응답하여, 확장 프레임워크는, 예를 들어 콘텐츠 공유 서비스들의 UTI를 인스톨된 확장자들의 UTI들과 매칭시킴으로써, 요청된 서비스들을 제공할 수 있는 임의의 인스톨된 또는 등록된 확장자들을 검색한다. 공유 UTI와 매칭하는 UTI들을 갖는 공유 확장자들의 리스트가 그들 중 하나를 선택하도록 사용자에게 제공될 것이다.
일 실시예에서, 사용자에 의해 또는 자동으로 시스템에 의해, 일단 공유 확장자가 선택되었다면, 호스트 애플리케이션은 공유 확장자에 공유될 콘텐츠의 감소된 해상도 이미지(예컨대, 썸네일)을 나타내는 데이터 객체를 송신한다. 공유 확장자는 콘텐츠의 감소된 해상도 이미지가 디스플레이되는 공유 시트를 생성한다. 이어서, 공유 확장자는, 예를 들어 원격 뷰 브리지 접속(예컨대, 원격 뷰 제어기 또는 원격 뷰 브리지)을 이용하여, 공유 시트의 복제본을 공유 시트 클론으로서 호스트 애플리케이션 내에 주입한다. 공유 시트 클론은 호스트 애플리케이션에 의해 디스플레이된다. 호스트 애플리케이션으로부터의 커미트 커맨드(예컨대, 전송 커맨드)에 응답하여, 공유 확장자는 호스트 애플리케이션으로부터 썸네일 이미지와 연관된 완전한 실제 콘텐츠를 요청한다. 그 후, 실제 콘텐츠가 내장된 최종 공유 시트가 이어서 공유 웹사이트 상에 포스팅된다.
도 2a는, 본 발명의 일 실시예에 따른, 애플리케이션 확장자들을 관리하기 위한 시스템 아키텍처를 도시한 블록 다이어그램이다. 도 2a를 참조하면, 시스템(200)은 예를 들어 서버, 데스크톱, 랩톱, 태블릿, 또는 모바일 전화기 등과 같은 임의의 종류의 데이터 프로세싱 시스템들을 나타낸다. 시스템(200)은 프로세싱 리소스들(도시되지 않음)에 의해 시스템(200) 내에서 실행되는 애플리케이션들, 예컨대 애플리케이션(204) 및 애플리케이션 확장자(205)를 론칭 및 관리하기 위해 애플리케이션 론칭 모듈(202) 및 리소스 관리자(203)를 구비하는 애플리케이션 관리자(201)를 포함한다. 프로세싱 리소스들은 하나 이상의 프로세서들 또는 프로세서 코어들을 나타낼 수 있다. 물리적 프로세서는 전형적으로 집적 회로로 지칭되는데, 이는 잠재적으로 코어들 또는 하드웨어 스레드들과 같은 임의의 수의 다른 프로세싱 요소들을 포함한다. 코어는 종종 독립적 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치되는 로직을 지칭하며, 여기서 각각의 독립적으로 유지되는 아키텍처 상태는 적어도 일부의 전용 실행 리소스들과 연관된다. 프로세서는 범용 프로세서, 예컨대 CPU(central processing unit)일 수 있다.
애플리케이션 관리자(201)는 시스템(200) 내에서 프로세싱 리소스들에 의해 구동 및 실행되는 운영 체제(OS)의 일부일 수 있다. 운영 체제는, 컴퓨터 하드웨어 리소스들을 관리하고 컴퓨터 프로그램들에 대한 공통 서비스들을 제공하는 소프트웨어의 집합이다. 운영 체제는 컴퓨터 시스템에서의 시스템 소프트웨어의 본질적 컴포넌트이다. 애플리케이션 프로그램들은 보통 운영 체제가 기능할 것을 필요로 한다. 운영 체제의 많은 기능들 중에서, 스케줄링은 스레드들, 프로세스들, 또는 데이터 흐름들이 시스템 리소스들(예컨대, 프로세서 시간, 통신 대역폭)에 대한 액세스를 제공받게 하는 방법이다. 이는 보통 밸런스를 맞추도록, 그리고 시스템 리소스들을 효과적으로 공유하거나 타깃 서비스 품질을 달성하도록 행해진다. 애플리케이션 관리자(201) 외에도, 운영 체제는 다른 코어 컴포넌트들, 예컨대, 스케줄러, 디바이스 관리자, 커널 등을 추가로 포함할 수 있다. 본 발명의 실시예들을 불필요하게 어렵게 만들지 않기 위해 이들 컴포넌트들은 본 명세서에 도시되지 않는다. 애플리케이션 론칭 모듈(202) 및/또는 리소스 관리자(203)는 애플리케이션 관리자(201) 외부의 개별 컴포넌트로서 실행될 수 있거나 또는 운영 체제의 다른 컴포넌트와 통합될 수 있다는 점에 유의한다. 시스템(200)의 운영 체제는, 예를 들어 Apple®로부터의 iOS™, Google®로부터의 Android™, Microsoft®로부터의 Windows™, 또는 다른 운영 체제들(예컨대, UNIX, LINUX, 실시간 또는 내장된 운영 체제들)과 같은 임의의 종류의 운영 체제들일 수 있다.
일 실시예에 따르면, 애플리케이션들 각각은 샌드박스 환경과 같은 각자의 전용 또는 개별 운영 환경 내에서 실행될 수 있고, 애플리케이션 관리자(201)에 의해 관리될 수 있다. 예를 들어, 애플리케이션(204)은 제1 프로세스 어드레스 공간인 제1 샌드박스 환경(206) 내의 제1 프로세스로서 론칭 및 실행된다. 애플리케이션 확장자(205)는 제2 프로세스 어드레스 공간인 제2 샌드박스 환경(207) 내의 제2 프로세스로서 론칭 및 실행된다. 프로세스 어드레스 공간은 가상 어드레스 공간, 또는 운영 체제가 프로세스에 이용가능해지는 소정 세트의 가상 어드레스들의 범위들인 어드레스 공간을 지칭한다. 가상 어드레스들의 범위는 보통 낮은 어드레스에서 시작하고, 컴퓨터의 명령어 세트 아키텍처에 의해 허용되는 최고 어드레스까지 확장될 수 있다. 이는 여러 개의 이점들을 제공하는데, 그들 중 하나는, 각각의 프로세스에 개별 어드레스 공간이 제공되는 경우, 프로세스 분리를 통한 보안이다.
애플리케이션(204)은 Apple Inc.®로부터의 Safari™, Microsoft®로부터의 Internet Explorer™, 또는 Google Inc.®로부터의 Google Chrome™과 같은 제1 애플리케이션으로서의 브라우저 애플리케이션일 수 있다. 애플리케이션 확장자(205)는 Adobe System®로부터의 Adobe Acrobat™, 또는 콘텐츠 공유 애플리케이션, 예컨대 Facebook™ 또는 Tweeter™ 애플리케이션과 같은 제2 애플리케이션(도시되지 않음)의 플러그인일 수 있다. 플러그인은 구체적으로 제1 애플리케이션이 제2 애플리케이션의 기능들에 액세스하도록 설계된다. 플러그인 및 제2 애플리케이션은 제3자에 의해 개발될 수 있고, 번들로서 시장에 배포될 수 있다. 제2 애플리케이션이 시스템(200)에서 인스톨되어 있는 경우, 애플리케이션 인스톨러(도시되지 않음)는 번들의 메타데이터를 분석하며, 애플리케이션 확장자(205)가 애플리케이션(204)에 대해 설계되어 있음을 인식한다. 이어서, 애플리케이션 확장자(205)는, 예를 들어 개별 애플리케이션으로서 운영 체제의 레지스트리 내의, 애플리케이션(204)과 연관되거나 그와 맵핑된다. 그 결과, 애플리케이션 확장자(205)는 애플리케이션(204)에 대해 인스톨 및 이용가능하게 되어, 애플리케이션(204)이, 예를 들어 애플리케이션(204)으로부터 수신된, 특정 타입의 확장 서비스들(예컨대, 콘텐츠 공유 서비스)을 검색하라는 요청에 응답하여, 실행 시에 애플리케이션 확장자(205)를 호출하게 할 수 있다.
일 실시예에 따르면, 애플리케이션 확장자(205) 및 애플리케이션 확장자(205)를 호스팅하는 애플리케이션(204)은 개별 프로세스 어드레스 공간들(206, 207)에 로딩되어 실행되고, 운영 체제에 의해 개별 프로세스들처럼 처리된다. 일 실시예에서, 애플리케이션(204)은 제1 샌드박스 프로세스로서 제1 샌드박스 환경에서 론칭되어 실행되고, 애플리케이션 확장자(205)는 제2 샌드박스 프로세스로서 제2 샌드박스 환경에서 론칭되어 실행된다. 제1 샌드박스 환경 및 제2 샌드박스 환경은 (시스템(200)에 인스톨된 애플리케이션들 중 일부 또는 모두에 대한 보안 프로파일들(208)의 일부로서) 제1 보안 프로파일(209) 및 제2 보안 프로파일(210)에 각각 기초하여 구성된다. 애플리케이션(204) 및 애플리케이션 확장자(205)는 IPC 프레임워크(도시되지 않음)를 통해 서로 통신한다. 운영 체제는 보안을 강화하며, 제1 및 제2 보안 프로파일들(209, 210)에 기초하여 개별적으로 또는 독립적으로 애플리케이션(204) 및 애플리케이션 확장자(205)의 리소스들을 각각 관리한다.
샌드박스 프로세스는, 프로세스를 소정 세트의 사전정의된 리소스들로 제한하는 제한적 운영 환경(예컨대, 샌드박스) 내에서 제한된 프로세스를 지칭한다. 각각의 샌드박스 프로세스는, 예를 들어 전용 메모리 공간, 전용 저장 영역, 또는 가상 기계 등과 같은 소정 세트의 전용 시스템 리소스들과 연관될 수 있다. 애플리케이션을 샌드박스화(sandboxing)하는 목적들 중 하나는 애플리케이션을 다른 애플리케이션 또는 시스템 컴포넌트의 다른 불필요하거나 관련되지 않은 시스템 리소스들에 액세스하는 것으로부터 분리시켜서, 애플리케이션에 의해 야기되는 어떠한 손상도 시스템(100)의 다른 영역들로 번지지 않게 하는 것이다.
보안을 제공하기 위해, 애플리케이션은 그의 기능을 소정 서브세트의 동작들로 제한함으로써 그리고 적절한 동작, 즉 그의 의도된 기능에 따른 동작에 필요한 동작들만을 허용함으로써 "포함"될 수 있다. 각각의 애플리케이션에 대한 제한적 세트의 정책들을 구현하는 한 가지 방법은 애플리케이션을 포함 또는 "샌드박스화"하는 것이다. 애플리케이션 또는 프로세스의 샌드박스화는 봉쇄(containment)를 제공하고 보안 정책들, 예컨대 애플리케이션이 그의 의도된 기능들을 제공하는 데 필요한 그러한 기능들을 넘는 동작들을 취하도록 애플리케이션의 능력을 제한하는 정책들을 시행하도록 운영 체제 레벨 보호를 이용하여 달성될 수 있다.
애플리케이션이 실행 동안에 샌드박스화된 경우, 애플리케이션은 샌드박스(애플리케이션 컨테이너로도 지칭됨) 내에 포함되는 시스템 내에서 샌드박스 프로세스 또는 스레드로서 실행되는데, 여기서 그것은 소정 시스템 리소스들 또는, 보안 프로파일이 샌드박스 프로세스 또는 샌드박스 애플리케이션으로 지칭되는 샌드박스 애플리케이션과 연관되게 되는 다른 애플리케이션의 다른 영역(예컨대, 샌드박스)에 액세스할 수 없다.
샌드박스 프로세스는 보안 봉쇄가 구현되게 될 애플리케이션 또는 다른 프로그램이다. 많은 경우들에 있어서, 샌드박스 프로세스는 사용자 애플리케이션이지만, 그것은 데몬(daemon) 또는 서비스와 같이 컴퓨팅 디바이스 상에서 구현되는 다른 프로그램일 수 있다. 보안을 증가시키고 효율적인 메커니즘을 제공하기 위해, 보안 시스템의 일부분들은 커널 공간에서 구현 또는 실행된다. 또한, 샌드박스 프로세스들과는 별개의 메모리 공간에서 이들을 서로 추가로 격리시키기 위해 모니터 프로세스 모듈(도시되지 않음)이 실행된다. 구체적으로, 샌드박스 프로세스는 그의 프로세스 공간 외부의 메모리에 액세스하는 것이 제한되고, 비-샌드박스 프로세스를 발생(spawn)시키는 것이 추가로 금지된다. 예를 들어, 샌드박스 프로세스의 보안 프로파일은 소정 시스템 호출들을 이용하는 것으로부터 샌드박스 프로세스를 거부하는 규칙 또는 정책을 포함할 수 있는데, 이러한 규칙 또는 정책은 프로세스들이 서로의 어드레스 공간들을 변경하게 하는 메커니즘일 수 있다.
일부 실시예들에서, 정책은 컴퓨팅 디바이스에 접속된 외부 액세서리의 상태에 기초하여, 예컨대 특정 타입 또는 아이덴티티의 액세서리가 접속되는 경우, 분리되는 경우, 또는 접속되고 특정 모드에 있는(또는 있지 않는) 경우에, 프로그램이 소정 동작들을 수행하는 것을 방지할 수 있다. 예를 들어, 애플리케이션은 소정 기준들을 충족시키는 액세서리가 데이터 버스에 접속되고 수신 모드에 있는 경우에만 외부 액세스가능 데이터 버스를 통해 통신하도록 허용될 수 있다. 샌드박스화 기법들에 관한 추가 상세 정보는 2006년 8월 4일자로 출원되었고 현재 미국 특허 제8,272,048호인 미국 특허 출원 제11/462,680호에서 찾을 수 있으며, 상기 출원은 본 출원의 공통 양수인에게 양도되었고 전체적으로 본 명세서에 참고로 포함된다.
도 2a를 다시 참조하면, 보안 프로파일(209)은 애플리케이션(204)이 프로세스 어드레스 공간(206) 내에서 그의 동작들 동안에 이용할 수 있는 제1 세트의 제한된 리소스들을 지정한다. 유사하게, 보안 프로파일(210)은 애플리케이션 확장자(205)가 프로세스 어드레스 공간(207) 내에서 그의 동작들 동안에 이용할 수 있는 제2 세트의 제한된 리소스들을 지정한다. 이러한 예에서, 제2 세트의 리소스들은 제1 세트의 리소스들보다 더 적을 수 있다(예컨대, 더 제한될 수 있다). 예를 들어, 애플리케이션(204)은 네트워크 및 시스템(200)의 로컬 저장소에 액세스할 수 있고, 반면에 애플리케이션 확장자(205)는 동일한 네트워크에 액세스할 수는 없지만 시스템(200)의 로컬 저장소에는 액세스할 수 있다.
일 실시예에 따르면, 하나 이상의 권한들이 데이터 프로세싱 시스템에서 효율적으로 이용될 각각의 프로그램 또는 애플리케이션에 대해 정의된다. 권한들은 프로그램이 그의 실행 동안에 액세스하도록 권한을 부여받는 소정 기능들 또는 리소스들을 나타낸다. 권한들은 프로그램의 개발 동안에 개발자에 의해 지정될 수 있거나, 또는, 대안으로, 권한들은 프로그램을 제공하거나 분배하는 인가 엔티티, 예컨대 인가 서버 또는 권한설정 서버에 의해 지정될 수 있다. 그러한 권한들은 프로그램에 연결 또는 내장되는 특성 또는 메타데이터로서 지정될 수 있고, 디지털 인증서를 사용하여 인가 엔티티에 의해 선택적으로 서명될 수 있다.
이어서, 권한들은 프로그램이 프로그램의 실행 동안에 이행 또는 액세스할 수 있거나 또는 그렇게 할 수 없는 소정 동작들 또는 리소스들을 특정하는 소정 세트의 규칙들을 생성하는 데 이용될 수 있다. 이어서, 소정 세트의 규칙들은, 예를 들어 프로그램의 인스톨 동안, 프로그램에 대한 보안 프로파일에 동적으로 컴파일된다. 프로그램의 실행 동안, 보안 프로파일은 소정 세트의 규칙들을 강화하여 프로그램이 임의의 동작을 수행하거나 또는 프로그램이 권한을 부여받지 않은 임의의 리소스에 액세스하는 것을 제한하도록 하는 데 이용된다. 이는, 사실상, 제한된 운영 환경(예컨대, 샌드박스 또는 샌드박스화된 환경)에서 동작하도록 프로그램을 포함하거나 강화한다. 리소스들은, 예를 들어 메모리들, 입력/출력(IO)들, 버스들, 저장소, 파일들, 네트워크 접속부들(예컨대, 소켓들, 포트들, 또는 네트워크 어드레스들), 프로세스간 통신 채널들(예컨대, UNIX 도메인 소켓들, XPC, MACH 포트들) 등과 같은 데이터 프로세싱 시스템 또는 전자 디바이스에서의 임의의 종류의 리소스들을 지칭한다.
제한된 운영 환경 내에서 프로그램의 실행을 제한하는 것은 전자 디바이스의 다른 컴포넌트들 또는 리소스들에 간섭하거나 그들에게 손상을 야기하는 프로그램의 변화들을 감소시킬 수 있다. 예를 들어, 프로그램은 제3자에 의해 개발될 수 있고, 네트워크로부터 다운로드될 수 있다. 프로그램은 운영 체제, 마이크로프로세서, 버스, 또는 전자 디바이스의 다른 컴포넌트들에 의해 보통 배타적으로 활용되는 소정 임계 메모리 공간에 우발적으로 액세스할 수 있는 오작동 컴포넌트 또는 루틴(예컨대, 프로그래밍 버그들)을 포함할 수 있다. 그러한 동작들은 전자 디바이스가 충돌하게 할 수 있다. 대안으로, 프로그램은 운영 환경 및/또는 전자 디바이스에 의도적으로 손상을 야기하도록 개발되는 악성 프로그램일 수 있다. 예를 들어, 바이러스를 갖는 프로그램은 전자 디바이스를 제어하도록 그리고/또는 전자 디바이스를 동작시키는 사용자의 인증서 정보를 도용하도록 특수하게 개발될 수 있다. 제한된 운영 환경 내에서 프로그램의 실행을 제한함으로써, 그러한 손상은 상당히 감소될 수 있다.
도 2a를 다시 참조하면, 이러한 예에서, 애플리케이션(204) 및 애플리케이션 확장자(205)를 개별 프로세스 어드레스 공간들(206, 207)에서 실행시킴으로써, 애플리케이션(204) 및 애플리케이션 확장자(205)의 보안은 독립적으로 강화 및 관리될 수 있다. 하나의 엔티티(예컨대, 애플리케이션 확장자(205))의 오작동이 다른 것(예컨대, 애플리케이션(204))의 많은 손상을 야기하지는 않을 것이다. 또한, 애플리케이션(204) 및 애플리케이션 확장자(205)와 연관된 리소스들이 효율적으로 관리될 수 있다. 예를 들어, 애플리케이션(204)이 더 이상 애플리케이션 확장자(205)를 필요로 하지 않는 경우, 애플리케이션 확장자(205)는 개별적으로 종료 또는 언로딩될 수 있고, 그의 리소스들은 애플리케이션(204)의 동작들에 크게 영향을 주지는 않으면서 다른 용도들을 위해 리소스 풀로 다시 배포될 수 있다.
도 2b는, 본 발명의 다른 실시예에 따른, 애플리케이션 확장자들을 관리하기 위한 시스템 아키텍처를 도시한 블록 다이어그램이다. 도 2b를 참조하면, 시스템(250)은 예를 들어 서버, 데스크톱, 랩톱, 태블릿, 또는 모바일 전화기 등과 같은 임의의 종류의 데이터 프로세싱 시스템들을 나타낸다. 도 2a의 시스템(200)과 유사하게, 시스템(250)은 프로세싱 리소스들에 의해 시스템(200) 내에서 실행되는 애플리케이션들, 예컨대 애플리케이션(204) 및 애플리케이션 확장자(205)를 론칭 및 관리하기 위해 애플리케이션 론칭 모듈(202) 및 리소스 관리자(203)를 구비하는 애플리케이션 관리자(201)를 포함한다.
일 실시예에 따르면, 애플리케이션(204) 및 애플리케이션 확장자(205)는 대응하는 확장 포인트(225)에 의해 중개될 수 있는 IPC 프레임워크(도시되지 않음)를 통해 서로 통신한다. 확장 포인트(225)는, 운영 체제들에 의해 정의되었고 확장 서비스 제공자들에 의해 동의된 다양한 확장 포인트들 중 하나일 수 있다. 애플리케이션(204) 및 확장자(205)가 서로 통신하게 하기 위해, 애플리케이션(204) 및 확장자(205)는 확장 포인트(225)에 대해 특별히 설계되어 있는 소정 세트의 정책들 및/또는 통신 프로토콜(들)(예컨대, API들)에 부합해야 한다. 따라서, 애플리케이션(204) 및 확장자(205)는, 특히 확장 포인트(225)에 대해, SDK 또는 라이브러리들을 이용하여 컴파일되어야 한다.
운영 체제는 보안을 강화하며, 제1 및 제2 보안 프로파일들(209, 210)에 기초하여 개별적으로 또는 독립적으로 애플리케이션(204) 및 애플리케이션 확장자(205)의 리소스들을 각각 관리한다. 제2 애플리케이션(215)이, 실행 시, 개별 샌드박스 환경(217)에서 론칭될 수 있다는 점에 유의한다. 애플리케이션(204)이 확장자(205)에 의해 제공된 기능에 액세스하는 경우, 컨테이너 애플리케이션(215)을 론칭할 필요가 없는데, 이는 그들이 개별 프로그램들로서 취급되기 때문이며, 그럼에도 불구하고, 확장자(205) 및 애플리케이션(215)은 실행 동안에 동일한 라이브러리 또는 프레임워크를 공유할 수 있다.
도 2b를 다시 참조하면, 이러한 예에서, 애플리케이션(204) 및 애플리케이션 확장자(205)를 개별 프로세스 어드레스 공간들(206, 207)에서 실행시킴으로써, 애플리케이션(204) 및 애플리케이션 확장자(205)의 보안은 독립적으로 강화 및 관리될 수 있다. 하나의 엔티티(예컨대, 애플리케이션 확장자(205))의 오작동이 다른 것(예컨대, 애플리케이션(204))의 많은 손상을 야기하지는 않을 것이다. 또한, 애플리케이션(204) 및 애플리케이션 확장자(205)와 연관된 리소스들이 효율적으로 관리될 수 있다. 예를 들어, 애플리케이션(204)이 더 이상 애플리케이션 확장자(205)를 필요로 하지 않는 경우, 애플리케이션 확장자(205)는 개별적으로 종료 또는 언로딩될 수 있고, 그의 리소스들은 애플리케이션(204)의 동작들에 크게 영향을 주지는 않으면서 다른 용도들을 위해 리소스 풀로 다시 배포될 수 있다.
도 2c는, 본 발명의 일 실시예에 따른, 애플리케이션 및 애플리케이션 확장자를 실행시키기 위한 방법을 도시한 흐름도이다. 방법(250)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(250)은 도 2a 및/또는 도 2b에 도시된 바와 같은 시스템에 의해 수행될 수 있다. 도 2c를 참조하면, 블록(251)에서, 프로세싱 로직은 제1 애플리케이션의 제1 보안 프로파일에 기초하여 제1 샌드박스 환경(예컨대, 제1 프로세스 어드레스 공간)에서 제1 애플리케이션을 론칭한다. 블록(252)에서, 애플리케이션 확장자(예컨대, 플러그인)를 호출하기 위한, 제1 애플리케이션으로부터의 요청에 응답하여, 프로세싱 로직은 애플리케이션 확장자와 연관된 제2 보안 프로파일에 기초하여 제2 샌드박스 환경(예컨대, 제2 프로세스 어드레스 공간) 내에서 애플리케이션 확장자를 론칭한다. 애플리케이션 확장자는 제2 애플리케이션의 확장자일 수 있고, 여기서 확장자는 제1 애플리케이션이 제2 애플리케이션의 기능들에 액세스하게 하도록 특별히 설계된다. 블록(253)에서, 프로세싱 로직은 제1 및 제2 보안 프로파일들에 의해 제공된 권한에 기초하여 애플리케이션과 애플리케이션 확장자 사이에서의 통신을 가능하게 한다. 블록(254)에서, 프로세싱 로직은 개별적으로 보안을 강화하고, 제1 및 제2 샌드박스 환경들을 통해 제1 애플리케이션 및 애플리케이션 확장자의 리소스들을 관리한다.
일 실시예에 따르면, 애플리케이션 확장자가 사용자에게 디스플레이될 콘텐츠, 예컨대 GUI 콘텐츠를 생성하는 경우, 동일한 프로세스 어드레스 공간 내에서 구동되는 애플리케이션 확장자를 필요로 하는 API를 통해 애플리케이션이 애플리케이션 확장자에 직접 액세스하게 하지 않고서, 콘텐츠가 IPC 프레임워크를 통해 애플리케이션 내에 주입되고 사용자에게 제시된다. 구체적으로, 원격 뷰 제어기가 애플리케이션 및 애플리케이션 확장자 각각 내에 내장되어, 애플리케이션 확장자에 의해 렌더링되는 GUI 콘텐츠를 애플리케이션 내에 주입한다. 애플리케이션 및 애플리케이션 확장자 내에서 또는 이와 연관되어 구동되는 원격 뷰 제어기들은 애플리케이션과 애플리케이션 확장자 사이에서 GUI 콘텐츠와의 사용자 상호작용을 동기화시키도록 구성된다.
도 3a는 본 발명의 일 실시예에 따른 운영 체제의 아키텍처의 일례를 도시한 블록 다이어그램이다. 운영 체제(300)는 도 2a 및/또는 도 2b에 도시된 바와 같은 시스템의 일부로서 구현될 수 있다. 도 3a를 참조하면, 운영 체제(300)는, 특히, 다양한 클라이언트들, 예컨대 클라이언트들(301, 302)이 확장 포인트들(303 내지 305)을 통해 액세스하게 하도록 소정 세트의 하나 이상의 확장 포인트들(303 내지 305)을 포함한다. 확장 포인트들(303 내지 305) 각각은 호스트 애플리케이션으로서의 하나의 클라이언트가 컨테이너 애플리케이션으로서의 다른 애플리케이션의 기능들 중 적어도 일부를 확장시키는 확장자로서의 다른 클라이언트에 의해 제공되는 사전정의된 서비스 또는 서비스들을 획득하게 하는 소정 세트의 사전정의된 API들 또는 프로토콜들을 나타낸다. 확장 포인트들(303 내지 305) 각각은 확장 포인트와 연관된 프로세스들에 대해 리소스들, 스케줄링, 및 종료 방식들(예컨대, 프로세스 중 어느 것이 먼저 종료되어야 하는지 등등)을 추가로 정의할 수 있다. 일 실시예에서, 확장 포인트들(303 내지 305)은 운영 체제(300)와 연관된 다양한 공용 또는 대중적 기능들 또는 서비스들을 포함할 수 있다. 확장 포인트는 클라이언트가 다른 클라이언트로부터의/로의 서비스에 액세스하게 하거나 그를 제공하게 하는 소정 세트의 사전정의된 API들 또는 통신 프로토콜들을 정의한다. 확장 포인트에 의해 제공되는 서비스가 운영 체제의 표준 컴포넌트에 의해 제공될 수 있거나, 또는 제3자 기능이 제3자 벤더에 의해 제공될 수 있다.
확장 포인트들(303 내지 305)은 확장 관리자(310)에 의해 관리될 수 있고, 여기서 확장 포인트들(303 내지 305)은 운영 체제(300)의 시스템 컴포넌트의 일부로서 총체적으로 확장 인터페이스, 확장 계층, 또는 확장 프레임워크로 지칭될 수 있다. 확장자(302)뿐만 아니라 그의 대응하는 컨테이너 애플리케이션(도시되지 않음)이 인스톨되는 경우, 인스톨 모듈(320)은 확장자(302) 및 그의 컨테이너 애플리케이션을 포함하는 애플리케이션 번들의 메타데이터를 분석한다. 확장자(302)와 연관된 메타데이터에 기초하여, 인스톨 모듈(320)은 확장자(302)가 확장 포인트(304)에 대해 특별히 설계 및 개발되어 있음을 인식한다. 예를 들어, 확장자(302)는 특정 확장 템플릿을 이용하여 개발될 수 있고, 확장 포인트(304)에 대응하는 특정 세트의 라이브러리들에 컴파일될 수 있다.
이어서, 인스톨 모듈(320)은 운영 체제(300)에 확장자(302)를 인스톨하고, 론칭 데이터베이스(208)에 확장자(302)와 관련된 임의의 정보를 저장한다. 예를 들어, 확장자(302)의 보안 프로파일(예컨대, 구성 파일)은 컴파일되어 론칭 데이터베이스(208)에 저장될 수 있다. 보안 프로파일은 확장자(302)가 확장 포인트(304)를 통해 서비스 또는 서비스들을 제공할 수 있음을 나타내는 정보를 포함할 수 있다. 보안 프로파일은 확장자(302)가 론칭되는 경우에 샌드박스 환경을 구성하도록 후속으로 이용될 수 있는 리소스 권한들 및/또는 제한들을 추가로 포함할 수 있다. 다른 확장자들은 인스톨 모듈(320)에 의해 유사한 방법으로 인스톨될 수 있다. 추가로, 확장자(302)는 또한 확장 레지스트리(350)에 등록될 수 있고, 확장 레지스트리(350)는, 특정 타입 또는 클래스의 확장 서비스들에 대한 쿼리에 응답하여, 예를 들어 확장자들의 UTI들이 인스톨되는 것에 기초하여, 후속하여 확장 서비스들을 검색하는 데 사용될 수 있다. 확장 레지스트리(350) 및 론칭 데이터베이스(208)는 쿼리 API를 갖는 단일 저장소에 통합될 수 있다는 점에 유의한다.
이어서, 클라이언트(이러한 예에서는 애플리케이션(301))가, 확장자(304)를 통해 통신함으로써, 확장 포인트(304)에 이용가능한 서비스(확장 서비스로도 지칭됨)에 관해 질의할 때, 확장 관리자(310)는 질의된 서비스를 제공할 수 있는 시스템에 인스톨된 임의의 확장자들을 발견하도록 론칭 모듈(202)(또는 발견 모듈, 도시되지 않음)을 호출한다. 이에 응답하여, 론칭 모듈(202)은 인스톨된 확장자들 중에서 그러한 서비스를 제공할 수 있는 것을 식별 및 판정하기 위해 론칭 데이터베이스(208) 내를 검색한다. 일 실시예에서, 질의는 서비스에 필요한 소정 특정 리소스들을 지정하는 정보를 포함할 수 있다. 이에 응답하여, 론칭 모듈(202)은 지정된 리소스들을 처리할 수 있는 자들을 검색 및 식별한다. 예를 들어, 호스트 애플리케이션은 처리하기 위해 서비스가 필요한 데이터 크기를 지정할 수 있다. 따라서, 도 3a에 도시된 바와 같은 확장 프레임워크는 확장자들의 용량들을 요청된 서비스들의 사양과 매칭시킬 수 있다. 대안으로, 확장 관리자(310)는 요청된 확장 서비스 또는 서비스들을 제공할 수 있는 확장자들의 리스트를 (예컨대, UTI들에 기초하여) 식별할 것을 확장 레지스트리(350)에 질의할 수 있고, 여기서 론칭 데이터베이스(208)는 확장자를 론칭할 때 샌드박스 운영 환경을 구성하기 위한 정보(예컨대, 샌드박스 구성 또는 프로파일들)를 포함한다. 확장 레지스트리(350)의 일례가 도 6a에 도시되어 있고, 하기에 추가로 상세히 기술된다.
확장 포인트(304)에 대한 서비스들을 제공할 수 있는 단 하나의 확장자가 인스톨되어 있는 경우, 론칭 모듈(202)은 식별된 확장자를 자동으로 론칭할 수 있다. 확장 포인트(304)에 대한 서비스들을 제공할 수 있는 다수의 확장자들이 있는 경우, 론칭 모듈은 확장자들의 리스트를 제시하여, 사용자 또는 클라이언트(301)가 론칭을 위해 그들 중 하나를 선택하게 할 수 있다. 인스톨된 동일한 확장자의 다수의 버전들이 있는 경우, 버전들 중 적어도 일부가 사용자에게 제시될 수 있거나, 또는, 대안으로, 최신 버전이 제시될 수 있다. 확장자의 초기 버전은 확장 레지스트리(350) 내의 인증된 확장자 제공자에 의해 대체 또는 치환되어, 확장자의 최신 버전이 식별 및 이용되게 할 수 있다. 일단 선택된 확장자(이러한 예에서는 확장자(302))가 론칭되었다면, 확장 관리자(310)는 확장 포인트(304)를 통해 클라이언트(301)와 클라이언트(302) 사이의 IPC 통신을 가능하게 하도록 IPC 서비스 모듈(315)을 호출한다. 일 실시예에서, 클라이언트(301)와 클라이언트(302) 사이의 통신은 Apple Inc.로부터 입수가능한 XPC 프레임워크와 같은 비동기식 메시지 기반 통신이다.
일 실시예에서, 확장 포인트들(303 내지 305)은 운영 체제(300)의 통지 센터에 대한 확장 포인트, 제3자 키보드에 대한 확장 포인트, 소셜 미디어에 대한 확장 포인트, UI(user interface)를 갖는 서비스들에 대한 확장 포인트, 파일 제공자/피커(picker)에 대한 확장 포인트, 사진 편집 및/또는 필터링에 대한 확장 포인트, 번역에 대한 확장 포인트, 및 파일/콘텐츠 파인더에 대한 확장 포인트를 포함할 수 있지만, 이들로 제한되지 않는다. 이들 확장 포인트들 중 일부는 액션 확장 포인트들로 지칭된다. 그러한 액션 확장자는 호스트 애플리케이션 내에서 다른 애플리케이션의 뷰잉 및/또는 편집 기능을 확장하도록 설계된다. 사용자는 호스트 애플리케이션으로부터 서비스를 개시시킬 수 있다. 서비스는 사용자에 의해 제공되는 콘텐츠(예컨대, 선택된 텍스트, 롤오버 상의 이미지, 툴바 아이템을 통해, 콘텍스트형 메뉴 등)를 이용할 것이다. 액션 확장자들의 예들은 선택된 콘텐츠를 번역하는 서비스, 문서에서 이미지의 특성들을 보는 서비스, 또는 이미지 상에 필터를 적용하는 서비스 등을 포함하지만, 이로 제한되지 않는다. 필터링 확장자는 술부(predicate) 또는 간단한 명령어를 지정하여, 시스템이 관련 확장자들을 리스팅하기 위해 공유 데이터에 대해 매칭되는 술부를 구축하게 하도록 설계될 수 있다.
일 실시예에서, 확장 포인트들(303 내지 305) 각각은 적어도 2개의 API 세트들, 즉, 도 3b에 도시된 바와 같이, 호스트 애플리케이션들이 확장 서비스들을 호출하도록 하기 위한 것 및 확장자들이 확장 서비스들을 제공하도록 하기 위한 것을 포함한다. 도 3b를 참조하면, 클라인트(301) 및 클라이언트(302)가 개별 샌드박스 환경들에서 실행되므로, 그들은 보통 서로 직접 통신할 수 없다. 오히려, 이러한 예에서 호스트 애플리케이션인 클라이언트(301)는 확장 관리자(310), 론칭 모듈(202), 및 IPC 서비스 모듈(315) 등과 같은 시스템 리소스들에 액세스하기 위해 확장 포인트(380)와 연관된 제1 세트의 API들 또는 프로토콜들을 이용하여 통신한다. 유사하게, 이러한 예에서 확장자인 클라이언트(302)는 확장 관리자(310), 론칭 모듈(202), 및 IPC 서비스 모듈(315)에 액세스하기 위해 확장 포인트(380)와 연관된 제2 세트의 API들 또는 프로토콜들을 이용하여 통신한다. 확장 포인트(380)에 액세스하기 위해, 클라이언트(301) 및 클라이언트(302)는 소프트웨어 개발 동안에 확장 포인트(380)와 연관되는 SDK를 이용하여 컴파일 및 링크될 수 있다.
도 4a는, 본 발명의 일 실시예에 따른, 애플리케이션과 애플리케이션 확장자 사이의 통신 구성을 도시한 블록 다이어그램이다. 도 4a를 참조하면, 시스템(400)은 전술된 바와 같은 확장 시스템들 중 임의의 것의 일부로서 구현될 수 있다. 도 4a를 참조하면, 전술된 바와 같이, 애플리케이션(204)은 샌드박스 환경(206) 내에서 실행되고, 한편, 애플리케이션 확장자(205)는 샌드박스 환경(207) 내에서 실행되며, 여기서 샌드박스 환경들(206, 207)은 상이한 프로세스 어드레스 공간들에 대응한다. 애플리케이션(204) 및 애플리케이션 확장자(205)가 상이한 어드레스 공간들에서 실행되므로, 그들은 다른 상대자와 연관된 리소스들(예컨대, 메모리 어드레스들)에 직접 액세스해서는 안 되며; 그렇지 않은 경우, 그것은 페이지 폴트(page fault)를 야기할 수 있다.
일 실시예에 따르면, 애플리케이션(204) 및 애플리케이션 확장자(205)는 IPC 프레임워크(401)를 통해 서로 통신한다. IPC 프레임워크(401)는 클라이언트들(이러한 예에서는 애플리케이션(204) 및 애플리케이션 확장자(205))이 IPC 프레임워크(401)와 비동기식으로 통신하게 하는 소정 세트의 통신 인터페이스들 또는 프로토콜들을 정의하는데, 여기서 IPC 프레임워크(401)는 클라이언트들 사이에서의 데이터 또는 메시지들의 교환을 가능하게 할 것이다. IPC 프레임워크(401)는, 예를 들어 Apple Inc.로부터의 XPC 또는 MACH, UNIX 소켓 프레임워크 등과 같은 임의의 종류의 IPC 프레임워크들일 수 있다. IPC 프레임워크(401)는 당사자들 사이에서 소정 세트의 IPC 서비스들로서 구현될 수 있다. 애플리케이션(204) 및 애플리케이션 확장자(205)가 서로 통신할 가능성이 있을 때, 그들은, 예를 들어 사전동의된 IPC 서비스(예컨대, IPC 서비스 이름)에 접속함으로써, IPC 서비스로의 접속을 확립하고, 접속을 통해 데이터 또는 메시지들을 전송 및 수신하기 시작한다. 예를 들어, 애플리케이션(204)과 함께 특별히 사용되는 애플리케이션 확장자(205)를 개발하기 위해, 개발자는 애플리케이션(204)을 개발하는 개발자와 동의된 특정 IPC 서비스 이름에 특별히 접속하여 애플리케이션(204) 및 애플리케이션 확장자(205) 양쪽 모두가 동일한 IP 서비스에 접속할 수 있게 하는 코드를 개발해야 할 수 있다.
IPC 프레임워크(401)에 연루된 서비스들의 수명은 운영 체제에 의해 관리될 수 있다. 호스트 애플리케이션은 IPC 서비스를 수동으로 시작 또는 중지시켜서는 안 되고; 오히려, 호스트 애플리케이션은 단순히 서비스에 접속할 수 있고, IPC 서비스가 구동 중이 아닌 경우에는 운영 체제가 서비스를 자동으로 론칭할 수 있고, 필요하지 않은 경우에는 운영 체제가 그것을 종료시킬 수 있다. IPC 프레임워크(401)의 경우, 애플리케이션은 자체를 보안 감지 컴포넌트를 각각 처리하는 다수의 서비스들로 분할할 수 있다. 이들 서비스들은 매우 제한된 승인들을 갖고서 구동될 수 있고, 그들이 상충되는 경우에 많은 손상을 입힐 수는 없을 것이다. IPC 프레임워크(401)는 또한 애플리케이션이 운영 체제에 의해 제공되는 소정 시스템 서비스들에 더 안전한 방식으로 액세스하게 할 수 있고, 제3자 애플리케이션들이 운영 체제의 보안 모델에 상충되지 않으면서 서로 데이터를 공유하게 할 수 있다.
일 실시예에서, 애플리케이션 확장자(205)가 애플리케이션(204)에 의해 제시되도록 의도되는 GUI 콘텐츠(405)를 렌더링하는 경우, 애플리케이션 확장자(205) 내에서 구동되는 콘텐츠 제어기(403)는 대응하는 콘텐츠 제어기(402)와 통신함으로써 콘텐츠(404)로서 제시되도록 GUI 콘텐츠를 애플리케이션(204) 내에 주입하도록 구성된다. 또한, 콘텐츠 제어기들(402, 403)은 디스플레이된 콘텐츠와의 사용자 상호작용 및/또는 콘텐츠 변경들을 동기화시키기 위해 서로 통신할 수 있다. 콘텐츠 제어기는 프로세스 또는 애플리케이션이 사용자 인터페이스를 다른 프로세스 또는 애플리케이션과 공유하게 하는 원격 뷰 제어기일 수 있다. 콘텐츠 제어기(403)는 애플리케이션 확장자(205)를 애플리케이션(204)의 동일한 어드레스 공간 내에서 구동시킬 필요없이 콘텐츠(405)를 콘텐츠 제어기(402)로 복제한다. 원격 뷰 서비스는 전술된 IPC 서비스로서 구현될 수 있다.
도 4b는, 본 발명의 다른 실시예에 따른, 애플리케이션 확장자들을 처리하기 위한 방법을 도시한 흐름도이다. 방법(450)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(450)은 도 4a의 시스템(400)에 의해 수행될 수 있다. 도 4b를 참조하면, 블록(451)에서, 프로세싱은 제1 애플리케이션과 연관된 제1 보안 프로파일에 기초하여 제1 샌드박스 환경에서 제1 애플리케이션을 론칭한다. 블록(452)에서, 프로세싱 로직은 애플리케이션 확장자와 연관된 제2 보안 프로파일에 기초하여 제2 샌드박스 환경에서 애플리케이션 확장자(예컨대, 플러그인)를 론칭한다. 일 실시예에서, 애플리케이션 확장자는 제1 애플리케이션이 제2 애플리케이션의 기능들에 액세스하도록 특별히 설계된 제2 애플리케이션의 확장자이다. 블록(453)에서, 제1 콘텐츠가 애플리케이션 확장자 내에서 렌더링된 것에 응답하여, 프로세싱 로직은 IPC 프레임워크(401)를 통해 제1 콘텐츠를 제2 콘텐츠로서 제시되도록 제1 애플리케이션 내에 주입한다. 블록(454)에서, 프로세싱 로직은 IPC 프레임워크를 통해 제1 애플리케이션과 애플리케이션 확장자 사이에서 제1 및 제2 콘텐츠의 업데이트들을 동기화시킨다.
일 실시예에 따르면, 확장 포인트는 소프트웨어 개발자를 위한 확장자에 대한 인터페이스로서 동작하고, 확장자가 동작하는 도메인을 제공한다. 각각의 확장 포인트는 사전정의된 세트의 정책들(예컨대, 리소스 권한들 또는 제한들)과 연관되고, 호스트 애플리케이션과 확장자 사이에서 교환될 수 있는 메시지들을 특정한다. 특정 확장 포인트에 대해 설계된 모든 확장자들은 해당 특정 확장 포인트의 사전정의된 정책들에서 설명되는 사양에 부합해야 한다. 모든 확장자들은, 운영 환경에서 실행 시, 연관된 확장 포인트에 의해 정의되는 동일한 세트의 운영 환경 파라미터들에 대해 권한을 부여받거나 그에 의해 제한된다.
도 5a에 도시된 바와 같이, 제2 애플리케이션의 확장자가 개발되는 경우, 개발자는 SDK의 일부로서 해당 특정 확장 포인트와 연관된 확장 템플릿(501)을 이용하여, 소스 코드(502)에 기초하여, 컨테이너 애플리케이션(531) 및 연관된 확장자(532) 양측 모두의 실행가능한 이미지들뿐만 아니라 그들의 각자의 메타데이터(533, 534)를 생성할 수 있다. 확장자 및 컨테이너 애플리케이션은 번들(220)로서 배포될 수 있다. 번들은 컨테이너 애플리케이션(531) 및 컨테이너 애플리케이션을 설명하는 그의 메타데이터(533)와, 확장자(532) 및 확장자를 설명하는 그의 메타데이터(534)를 포함한다. 그러나, 컨테이너 애플리케이션(531) 및 확장자(532)는 개별 샌드박스 환경에서 각각 론칭될 수 있고 독립적으로 동작될 수 있는데, 이들은 공통 라이브러리 또는 프레임워크에 액세스할 수 있거나 그를 공유할 수 있지만 그들의 각자의 메타데이터 및/또는 대응하는 확장 포인트에 기초하여 구성될 수도 있다. 일부 실시예들에서, 컨테이너 애플리케이션은 다수의 확장자들(이러한 예에서는 확장자들(541, 542))을 포함할 수 있다. 확장자들 각각은 확장자 제공자 ID(예컨대, 확장자 제공자 ID(551)) 및 그의 버전(예컨대, 버전 식별자(552), 확장 키로도 지칭됨)를 추가로 명시할 수 있다. 확장자 제공자 ID는 확장자 제공자를 고유하게 식별하는 식별자이고, 사전결정된 당국(예컨대, 운영 체제 제공자)에 의해 인증된다. 신 버전의 확장자가 인스톨되는 경우, 대응하는 확장자 제공자가 성공적으로 인증된 후, 확장 레지스트리(예컨대, 도 3a의 확장 레지스트리(350)) 내의 대응하는 확장 키가 새로운 확장 키(예컨대, 버전(552))로 대체되어, 신 버전의 확장자가 구 버전 대신에 호출된다.
애플리케이션 번들은 소프트웨어 코드와 같은 관련 리소스들이 함께 그룹화되게 하는 디렉토리일 수 있다. 애플리케이션 번들은 ".app" 확장자(예컨대, "application.app")에 의해 식별될 수 있다. 애플리케이션 번들은 다수의 디렉토리들 및/또는 서브디렉토리들, 예컨대 "콘텐츠", 예를 들어 ".exe" 확장자(예컨대, "Application.exe", 그러나, 다른 실시예들에서, 실행가능한 파일은 다른 확장자를 가질 수 있거나, 또는 확장자를 포함하지 않을 수도 있음)에 의해 식별되는 애플리케이션의 실행가능한 코드를 포함할 수 있는 "운영 체제", 애플리케이션의 리소스들(예컨대, "Image.png")을 포함할 수 있는 "리소스들", 및 애플리케이션 정의 서비스들을 포함할 수 있는 "XPC 서비스들"을 포함할 수 있다. 이들 서비스들은 특정 기능을 구현하거나 또는 지정된 태스크를 수행하도록 설계된 소정 세트의 컴퓨터 구현 명령어들일 수 있다. 일 실시예에서, 애플리케이션 정의 서비스들은 애플리케이션 번들로 나타내진 애플리케이션에만 이용가능한 서비스들이다. 또한, 이들 애플리케이션 정의 서비스들은, 일단 애플리케이션이 종료되면 서비스가 더 이상 이용가능하지 않다는 점에서 애플리케이션의 수명에 종속될 수 있다.
일 실시예에서, 애플리케이션 번들 내의 실행가능한 코드는 하나 이상의 프레임워크들에 대해 링크될 수 있다. 프레임워크들은 명확한(well-defined) API에 랩핑(wrap)된 소프트웨어 코드의 재사용가능한 추상성(abstraction)을 갖는 소프트웨어 라이브러리들을 포함할 수 있다. 프레임워크들은 소프트웨어 개발자들이 특정 개발 환경(예컨대, 운영 체제가 컴퓨팅 디바이스 상에서 구동됨)에 대한 애플리케이션의 표준 구조를 구현하게 한다. 애플리케이션에 링크된 프레임워크들은 프레임워크 번들들로 나타내질 수 있다. 공통으로 사용되는 프레임워크들의 일부 예들은 코어 오디오 프레임워크 및 코어 그래픽 프레임워크를 포함할 수 있다. 애플리케이션 내의 실행가능한 파일들은 애플리케이션 번들 내의 지정된 위치에 프레임워크 번들들의 프레임워크 이름 또는 다른 식별자를 저장함으로써 그리고/또는 연관된 프레임워크에 의해 제공되는 API를 호출함으로써 프레임워크들에 대해 링크될 수 있다.
프레임워크 번들들에 포함된 서비스들은 동일한 프레임워크에 대해 모두 링크되어 있는 다수의 상이한 애플리케이션들이 이용가능하게 될 수 있다. 일 실시예에서, 소정 개수의 상이한 애플리케이션들이 이용가능한 프레임워크 내의 특정 서비스의 단일 글로벌 인스턴스가 있을 수 있다. 다른 실시예에서, 시스템의 각각의 사용자에 대해 인스턴스화된 특정 서비스의 개별 인스턴스 또는 시스템에서 구동되는 중인 각각의 애플리케이션에 대한 서비스의 인스턴스가 있을 수 있다. 다른 실시예들에서, 각각의 서비스는 글로벌 인스턴스, 사용자별 인스턴스, 또는 애플리케이션별 인스턴스로서 상이한 표기를 가질 수 있고, 여기서 동일한 또는 상이한 프레임워크(들)에서 동시에 존재하는 각각의 타입의 서비스들이 있을 수 있다. 또한, 일부 다른 인스턴스는 프레임워크의 재량에 따라 생성될 수 있다. 예를 들어, 하나의 프레임워크는 오픈되는 각각의 브라우저 탭 또는 윈도우마다 하나의 인스턴스를 가질 수 있다. 각각의 인스턴스는 UUID(universal unique identifier)에 의해 식별가능할 수 있다.
애플리케이션이 구축될 때, 애플리케이션 설계자는 어떤 서비스들이 애플리케이션에서 특별히 정의되는지뿐만 아니라 애플리케이션이 어떤 프레임워크들에 대해 링크될 것인지 지정할 수 있다. 애플리케이션 설계자는 또한 어떤 서비스들이 그들 프레임워크들 내에 포함되는지에 관한 지식을 가질 수 있다. 따라서, 링크된 프레임워크들 내의 서비스들과 애플리케이션 정의 서비스들 사이에서, 애플리케이션 설계자는 애플리케이션 실행가능한 파일이 액세스할 필요가 있거나 액세스할 가능성이 있을 수 있는 서비스들 모두에 대한 액세스를 승인할 수 있다. 또한, 애플리케이션 설계자는 애플리케이션 실행가능한 파일이 어느 서비스들에 액세스하도록 허용되는지 지정할 수 있다. 따라서, 불필요하고 비인가된 서비스들은 애플리케이션이 이용가능하지 않게 된다. 메타데이터 형태의 이러한 정보는, 궁극적으로, 애플리케이션과 연관된 보안 프로파일의 권한들의 일부로서 컴파일될 수 있다.
도 5a를 다시 참조하면, 운영 체제와 연관된 확장 포인트들 중 적어도 하나에 대해, 확장 템플릿(예컨대, 템플릿(501))은 소프트웨어 개발자가 간단하고 사용자 친화적인 사용자 인터페이스를 갖게 하여 해당 특정 확장 포인트에 대한 소스 코드(예컨대, 소스 코드(502))를 구성하게 하도록 정의될 수 있다. 예를 들어, 확장 템플릿은, 호스트 애플리케이션의 시점으로부터 또는 확장자의 시점으로부터, 연관된 확장 포인트에 액세스하는 데 전형적으로 필요한 소정 세트의 사전정의된 소정 객체들 또는 클래스들과 연관될 수 있다. 확장 템플릿은 확장 포인트와 특별히 연관되는 소정 세트의 라이브러리들 또는 프레임워크들을 추가로 식별할 수 있다. 따라서, SDK(510)의 SDK 툴, 예컨대 컴파일러 및/또는 링커가 소스 코드(502)를 컴파일하는 경우, 관련 라이브러리들 또는 프레임워크들, 예컨대 라이브러리들(520)이 활용된다. 그 결과, 동일한 확장 포인트에 대해 컴파일된 모든 확장자들은 동일한 세트의 API들 또는 프로토콜들과 호환가능할 것이고, 실행 동안에 동일한 리소스 권한들에 대해 권한을 부여받거나 또는 운영 환경의 동일한 제한들로 제한될 것이다.
도 5b는, 본 발명의 일 실시예에 따른, 확장 포인트들에 대한 확장자들을 개발하기 위한 방법을 도시한 흐름도이다. 방법(550)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(550)은 도 5a의 SDK(510)에 의해 수행될 수 있다. 도 5b를 참조하면, 블록(551)에서, 소정 세트의 확장 포인트들이 정의된다. 각각의 확장 포인트는 소정 세트의 API들과 연관되어, 확장자를 통해 다른 애플리케이션(예컨대, 컨테이너 애플리케이션)으로부터 확장될 수 있는 하나의 애플리케이션이 사전정의된 기능에 액세스하거나 또는 서비스를 획득하게 한다. 블록(552)에서, 컨테이너 애플리케이션이 컴파일된다(컨테이너 애플리케이션에 대한 리소스 권한들을 정의하는 제1 구성 파일을 생성하는 것을 포함함). 블록(553)에서, 특정 확장 포인트를 통해 컨테이너 애플리케이션의 기능을 다른 애플리케이션으로 확장하는 확장자가 컴파일된다(해당 확장 포인트와 연관된 메타데이터를 갖는 제2 구성 파일을 생성하는 것을 포함함). 블록(554)에서, 컨테이너 애플리케이션 및 확장자뿐만 아니라 그들의 각자의 구성 파일들이 인스톨을 위해 번들 내에 패키징된다. 컨테이너 애플리케이션 및 확장자는 상이한 샌드박스들에서 독립적으로 론칭될 수 있다.
도 6a는, 본 발명의 일 실시예에 따른, 확장자를 등록시키기 위한 시스템을 도시한 블록 다이어그램이다. 시스템(600)은 전술된 바와 같은 운영 체제의 일부분으로서 구현될 수 있다. 도 6a를 참조하면, 확장 프레임워크, 예컨대 도 3a에 도시된 바와 같은 것이 운영 체제에 인스톨 및 등록된 확장자들의 리스트를 설명하는 확장 레지스트리(350)를 내부에 보유한다. 일 실시예에서, 확장 레지스트리(350)는 인스톨 또는 등록된 확장자들 중 하나에 각각 대응하는 다수의 엔트리들을 포함한다. 각각의 확장 엔트리는 확장자 ID(610), 확장자 제공자 ID(602), 및 확장 키(603)를 포함하지만 이들로 제한되지 않는다. 확장자 ID(610)는 운영 체제 제공자와 확장자 제공자들, 예컨대 UTI 사이에서 정의되고 동의된 소정 타입 또는 클래스의 확장 서비스들을 고유하게 식별할 수 있다. 확장자 제공자 ID(611)는 사전결정된 당국에 의해 인가 또는 인증될 수 있는 확장 서비스를 제공하는 확장자 제공자를 고유하게 식별할 수 있다. 확장 키(612)는 시스템에 현재 인스톨 또는 등록되어 있는 확장자의 특정 버전 또는 인스턴스를 나타낼 수 있다.
일 실시예에서, 확장자가 개발되는 경우, 확장자의 이진 코드 또는 실행가능한 이미지가 확장자의 해당 특정 버전 또는 배포와 연관된 확장 키 및 대응하는 확장자 제공자 ID로 인코딩될 수 있다. 이러한 예에서, 도 6a를 참조하면, 각각, 초기 버전의 확장자(621)는 내부에서 인코딩된 확장자 제공자 ID(623) 및 확장 키(625)를 포함하고, 반면에 신 버전의 확장자(622)는 확장자 제공자 ID(624) 및 확장 키(626)를 포함한다. 확장자 제공자 ID들(623, 624)은 그들이 상이한 벤더들에 의해 제공되는 경우에는 상이할 수 있고; 그렇지 않은 경우에는, 확장자 제공자 ID들(623, 624)은 동일할 수 있지만, 그들의 확장 키들(625, 626)은 대응하는 버전들 또는 인스턴스들에 따라 상이할 수 있다.
예시의 목적을 위해, 확장자들(621, 622)이 동일한 확장자 제공자에 의해 제공되고, 여기서 확장자(621)는 초기 버전인 반면에 확장자(622)는 신 버전인 것이 상정된다. 확장자(621)가 인스톨 모듈(320)에 의해 인스톨되었을 때, 대응하는 엔트리(650)가 생성되었는데, 여기서 필드(610)는 확장자(621)가 이러한 예에서 콘텐츠 공유 서비스들을 제공하는 타입의 확장 서비스들과 연관된 확장자 클래스 ID(예컨대, UTI)를 저장한다. 엔트리(650)의 필드(611)는 제공자 ID(623)를 저장하고, 엔트리(650)의 필드(612)는 확장 키(625)를 저장한다. 호스트 애플리케이션(601)이 대응하는 확장 포인트(602)를 통해 엔트리(650)와 연관된 확장자를 호출하고자 시도하는 경우, 확장 관리자(310)는 레지스트리(350)를 검색하여, 예를 들어 호스트 애플리케이션(601)에 의해 제공되는 확장자 ID에 기초하여, 소정 타입 또는 클래스의 확장 서비스들을 제공할 수 있는 확장자들 중 임의의 것을 식별할 수 있다. 이러한 예에서, 확장 엔트리(650)는 호스트 애플리케이션(601)에 의해 제공되는 확장자 ID를 레지스트리(350)의 확장자 ID들(610)에 매칭시킴으로써 식별된다. 제공자 ID(611) 및 확장 키(612)에 기초하여, 확장자(621)가 식별 및 론칭될 것이다.
이어서, 신 버전의 확장자(622)가 인스톨되는 경우, 일 실시예에 따르면, 인스톨 모듈(320)은 확장자(622)의 메타데이터(이러한 예에서는 확장자 제공자 ID(623))를 검사하여, 확장자(622)가 적절한 당국에 의해 승인 또는 인가된 진성 확장자 제공자에 의해 제공됨을 보장한다. 일단 확장자(622)의 확장자 제공자가 인증되었다면, 인스톨 모듈(320)은 엔트리(650)의 확장 키(612)(예컨대, 확장 키(625))를 더 새로운 확장 키(626)로 대체한다. 그 결과, 엔트리(650)와 연관된 확장자를 호출하기 위한 후속 요청에 응답하여, 신 버전의 확장자(622)가 이러한 예에서 구 버전의 확장자(621) 대신에 식별 및 론칭될 것이다.
도 6b는, 본 발명의 일 실시예에 따른, 확장 포인트들을 통해 확장자들을 관리하기 위한 방법을 도시한 흐름도이다. 방법(650)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(650)은 도 6a의 시스템(600)에 의해 수행될 수 있다. 도 6b를 참조하면, 블록(651)에서, 프로세싱 로직은 하나 이상의 다른 애플리케이션들에 의해 확장된 특정 확장 포인트와 연관된 특정 확장 서비스(예컨대, 특정 UTI에 의해 식별됨)를 질의하는, 제1 애플리케이션으로부터의 요청을 수신한다. 요청에 응답하여, 블록(652)에서, 프로세싱 로직은, 인스톨되어 해당 특정 확장 포인트를 통해 요청된 서비스를 제공할 수 있는 하나 이상의 확장자들의 리스트를 식별한다(최신 버전들의 확장자들을 식별하는 것을 포함함). 블록(653)에서, 식별된 확장자들의 리스트는 확장자들 중 하나를 선택하기 위한 제1 애플리케이션 또는 사용자에게 제시된다. 블록(654)에서, 제2 애플리케이션의 기능을 확장하는 확장자의 선택에 응답하여, 프로세싱 로직은 개별 샌드박스 환경에서 확장자를 론칭한다. 확장자는 제2 애플리케이션을 론칭할 필요 없이 독립적으로 실행될 수 있다는 점에 유의한다. 블록(655)에서, 확장 포인트와 연관된 리소스 제한은 대응하는 샌드박스 환경을 통해 확장자에 대해 강화된다.
전술된 바와 같이, 확장자들의 예들은 운영 체제(300)의 통지 센터에 대한 확장 포인트, 제3자 키보드에 대한 확장 포인트, 소셜 미디어에 대한 확장 포인트, UI를 갖는 서비스들에 대한 확장 포인트, 파일 제공자/피커에 대한 확장 포인트, 사진 편집 및/또는 필터링에 대한 확장 포인트, 번역에 대한 확장 포인트, 및 파일/콘텐츠 파인더에 대한 확장 포인트를 포함하지만, 이들로 제한되지 않는다. 이들 확장자들 중 일부, 예컨대 번역 확장 포인트 또는 필터링 확장 포인트는 액션 확장 포인트들로 지칭된다. 필터링 확장 포인트는 사진 필터링 동작들과 같은 데이터 필터링 동작들을 수행하는 필터링 확장자를 호출하는 데 이용될 수 있다. 일 실시예에 따르면, 액션 확장자는, 확장자로부터 호출 및 다운로드될 수 있고, 호스트 애플리케이션 내에서 실행되어 호스트 애플리케이션의 소정 태스크들을 돕는 실행가능한 코드, 예컨대 자바스크립트(JavaScript) 또는 다른 스크립트들을 포함할 수 있다.
도 7a는 본 발명의 일 실시예에 따른 액션 확장 포인트의 일례를 도시한 블록 다이어그램이다. 도 7a를 참조하면, 이러한 예에서의 액션 확장자(702)는 액션 확장 포인트(710)를 통해 호스트 애플리케이션(701)과 같은 클라이언트에 대한 콘텐츠 또는 데이터를 프로세싱하도록 설계된 콘텐츠 프로세싱 확장자이다. 액션 확장자(702)는 운영 체제를 제공하는 자와는 상이한 제3자 개발자에 의해 개발될 수 있다. 일 실시예에서, 액션 확장자(702)는 콘텐츠 프로세싱 기능 또는 모듈(705) 외에도 데이터 변환 코드(704A)를 포함한다. 헬퍼 에이전트(helper agent)로서의 데이터 변환 코드(704A)는 JavaScript™와 같은 실행가능한 스크립트의 형태로 구현될 수 있다.
일 실시예에서, 호스트 애플리케이션(701)이 액션 확장 서비스, 예시의 목적을 위해, 번역 확장 서비스를 요청하는 경우, 액션 확장 포인트(710)(예컨대, 번역 확장 포인트)는 확장자(702)를 식별 및 론칭하여 번역 서비스들을 제공한다. 또한, 호스트 애플리케이션(701)은 데이터 변환 코드(704A)를 호출하여, 콘텐츠 프로세싱 모듈(705)이 실질적인 번역을 수행하기 전에 소정 데이터 변환을 수행할 수 있다. 일 실시예에서, 호스트 애플리케이션(701)(이러한 예에서는 브라우저 애플리케이션)은 호스트 애플리케이션(701) 내에서 실행되는 데이터 변환 코드를 데이터 변환 코드(704B)로서 다운로드한다.
데이터 변환 코드(704B)는, 실행 시, 콘텐츠(703)를 분석하여 콘텐츠(703)에서 콘텐츠 프로세싱 모듈(705)에 의해 프로세싱될 필요가 있는 부분을 식별하도록 구성된다. 데이터 변환 코드(704B)는 식별된 콘텐츠를 확장 포인트(710)와 호환가능한 포맷으로 패키징할 것이고, 패키징된 데이터를 콘텐츠 프로세싱 모듈(705)(이러한 예에서는, 콘텐츠를 번역하는 번역 모듈)에 의해 프로세싱되도록 확장자(802)로 전송한다. 콘텐츠 프로세싱의 결과, 즉 번역된 콘텐츠에 응답하여, 데이터 변환 코드(704B)는 번역된 콘텐츠를 콘텐츠(703)와 호환가능하도록 리포맷화할 것이고, 번역된 콘텐츠를 콘텐츠(703)과 통합한다.
이러한 실시예는 호스트 애플리케이션(701)이 HTML(hypertext markup language) 페이지로서 소정 콘텐츠(703)를 디스플레이하는 브라우저 애플리케이션인 상황에 적용될 수 있다. 브라우저 애플리케이션은 자바스크립트, 즉 데이터 변환 코드(704A)를 다운로드할 수 있고, 이를 코드(704B)로서 실행시킬 수 있다. 이어서, 자바스크립트는 번역될 관심 데이터를 식별하기 위해 HTML 페이지를 분석 및 이해하도록 HTML 콘텐츠(703)를 프로세싱할 수 있다. 그 결과, 콘텐츠 프로세싱 모듈은 HTML 페이지의 구조를 이해할 필요가 없다. 데이터 변환 코드는 확장자(702)(다른 확장자의 확장자와 유사함)에 대한 헬퍼 에이전트로서 동작한다. 데이터 변환 코드(704B)는 여전히 확장 포인트(710)를 통해 확장자(702)와 통신해야 한다는 점에 유의한다. 데이터 변환 코드(704A)는 확장자(702) 내에 번들링되지만, 그것은 코드(704B)로서 호스트 애플리케이션(701)에 의해 다운로드 및 실행된다.
도 7b는, 본 발명의 일 실시예에 따른, 액션 확장 포인트에 의해 수행되는 방법을 도시한 흐름도이다. 방법(750)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(750)은 도 7a에 도시된 바와 같은 시스템에 의해 수행될 수 있다. 도 7b를 참조하면, 블록(751)에서, 콘텐츠 프로세싱 서비스(예컨대, 번역)를 호출하라는, 호스트 애플리케이션으로부터의 요청에 응답하여, 프로세싱 로직은 콘텐츠 프로세싱 확장자를 식별 및 로딩한다. 호스트 애플리케이션은 웹페이지를 디스플레이하는 브라우저 애플리케이션일 수 있고, 확장자는 번역 서비스들을 제공하는 번역 확장자일 수 있다. 블록(752)에서, 프로세싱 로직은 확장자로부터의 데이터 변환 코드를 다운로드하고, 호스트 애플리케이션 내에 데이터 변환 코드를 로딩한다. 데이터 변환 코드는 자바스크립트와 같은 실행가능한 스크립트일 수 있다. 블록(753)에서, 호스트는 데이터 변환 코드를 실행하여, 호스트 애플리케이션에 의해 제시되는 콘텐츠의 일부분을 분석 및 식별한다. 블록(754)에서, 데이터 변환 코드는 콘텐츠의 식별된 부분을 대응하는 확장 포인트(예컨대, 번역 확장 포인트)와 호환가능한 형태로 변환하고, 변환된 데이터를 확장 포인트를 통해 확장자로 전송한다. 프로세싱된 콘텐츠(예컨대, 번역된 콘텐츠)가 확장자로부터 수신된 것에 응답하여, 데이터 변환 코드는 데이터를 호스트 애플리케이션과 호환가능한 형태로 다시 변환할 것이고, 프로세싱된 콘텐츠를 호스트 애플리케이션의 기존 콘텐츠와 통합한다.
도 8a는, 본 발명의 일 실시예에 따른, 콘텐츠 공유 서비스들을 제공하기 위한 공유 확장 포인트를 도시한 블록 다이어그램이다. 시스템(800)은 전술된 확장 프레임워크들 중 임의의 것의 일부로서 구현될 수 있다. 도 8a를 참조하면, 이러한 예에서, 호스트 애플리케이션(801)은 웹사이트와 같은 콘텐츠 소스(802)에 의해 제공될 수 있는 콘텐츠(811)를 디스플레이 또는 렌더링한다. 콘텐츠(811)를 본 후, 사용자는 공유 사용자 인터페이스(812)를 활성화시킴으로써 콘텐츠(811)를 그의/그녀의 친구들과 공유하기를 원할 수 있다. 공유 사용자 인터페이스(812)의 활성화는 공유 확장 포인트(805)를 통과하는 공유 커맨드를 경로(821)를 통해 공유 확장자(803)로 전송한다. 경로(821)를 통해 송신되는 공유 커맨드는 콘텐츠(811)의 감소된 해상도 이미지(예컨대, 썸네일 이미지)를 갖는 데이터 객체를 추가로 포함할 수 있다. 이러한 예에서, 공유 확장자(803)는 전술된 기법들 중 일부를 이용하여 적절히 인스톨, 등록, 식별 및 선택되었음이 상정된다. 호스트 애플리케이션(801) 및 공유 확장자(803)는 전술된 바와 같은 공유 확장 포인트(805)에 의해 제공되는 IPC 프레임워크를 통해 서로 통신할 수 있다.
경로(821)를 통해 수신된 공유 커맨드에 응답하여, 일 실시예에 따르면, 공유 확장자(803)는 수신된 데이터 객체로부터 추출된 콘텐츠(811)의 썸네일 이미지가 내부에 제시되는 공유 시트(813)를 생성한다. 이어서, 공유 시트(813)는 경로(822)를 통해 호스트 애플리케이션(801) 내에 주입되고, 콘텐츠(811)를 나타내는 썸네일 이미지(816)를 갖는 공유 시트 클론(815)으로서 디스플레이된다. 공유 시트 클론은 공유 확장자(803)와 호스트 애플리케이션(801) 사이의 원격 뷰 브리지 접속을 통해 주입될 수 있다. 일단 사용자가 공유 시트 클론(815)을 보고 썸네일(816)에 의해 제시되는 콘텐츠를 공유할 것을 커미트(commit)하면, 커미트 커맨드가 경로(823)를 통해 공유 확장자(803)로 송신된다. 커미트 커맨드에 응답하여, 공유 확장자(803)는 경로(824)를 통해 실질적 콘텐츠(811)에 대한 요청을 송신한다. 일단 공유 확장자(803)가 경로(825)를 통해 호스트 애플리케이션(801)으로부터 실질적 콘텐츠를 수신하면, 그것은 썸네일 이미지(814)를 실질적 콘텐츠로 대체하고, 공유 시트(813)를 경로(826)를 통해 콘텐츠 공유 웹사이트 또는 플랫폼(804)에서 포스팅한다. 공유 확장 포인트는 공유 서비스들을 소셜 커뮤니티들(예컨대, Twitter™, Facebook™, LinkedIn™ 등) 및/또는 비-소셜 환경들(예컨대, AirDrop™, 이메일 등)로 확장하는 데 이용될 수 있다는 점에 유의한다.
도 8b는, 본 발명의 일 실시예에 따른, 공유 확장자를 사용하여 콘텐츠를 공유하기 위한 방법을 도시한 흐름도이다. 방법(850)은 소프트웨어, 하드웨어, 또는 이들의 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 방법(850)은 도 8a의 시스템(800)에 의해 수행될 수 있다. 도 8b를 참조하면, 블록(851)에서, 공유 콘텐츠에 대한 호스트 애플리케이션으로부터의 요청에 응답하여, 프로세싱 로직은 콘텐츠 공유 서비스들을 제공할 수 있는 공유 확장자를 식별 및 론칭한다. 블록(852)에서, 공유 확장자는 공유될 콘텐츠의 감소된 해상도 이미지(예컨대, 썸네일, 아이콘)를 갖는 공유 시트를 생성한다. 공유 시트는, 예를 들어 원격 뷰 브리지 접속을 이용하여, 호스트 애플리케이션 내에 공유 시트 뷰로서 주입된다. 블록(853)에서, 호스트 애플리케이션으로부터의 커미트 커맨드에 응답하여, 공유 확장자는 호스트 애플리케이션으로부터의 실질적 콘텐츠를 요청 및 수신하고, 블록(854)에서, 실질적 콘텐츠를 갖는 공유 시트는 콘텐츠 공유 웹사이트 상에 포스팅된다.
도 9는, 본 발명의 일 실시예에 따른, 애플리케이션의 종료를 처리하기 위한 프로세스를 도시한 블록 다이어그램이다. 시스템(900)은 전술된 임의의 시스템의 일부분으로서 구현될 수 있다. 도 9를 참조하면, 애플리케이션 관리자(201)가 애플리케이션(204)을 업그레이드하기 위한 업그레이드 관리자로부터의 요청 또는 대안으로 애플리케이션(204)을 종료시키기 위한 요청을 경로(911)를 통해 수신하는 경우, 애플리케이션 관리자(201)는 경로(912)를 통해 애플리케이션(204)과 통신하여, 그것이 애플리케이션(204)을 종료시키는 데 안전한지 여부를 질의한다. 질의에 응답하여, 애플리케이션(204)은 경로(913)를 통해 중앙 당국(902), 예컨대 윈도우 서버와 통신하여, 애플리케이션 확장자(205)가 사용자에 의해 현재 사용되는 중인지 여부를 판정한다. 중앙 당국(902)은, 사용자가 애플리케이션 확장자(205)에 의해 제공되는 사용자 인터페이스를 현재 사용하는 중인지 여부를 알아내는 한 가지 방법으로서, 애플리케이션 확장자(205)가 전경(foreground)에 있는지 여부를 경로(914)를 통해 판정할 수 있다. 이어서, 중앙 당국(902)은 경로(915)를 통해 애플리케이션 확장자의 동작 상태를 애플리케이션(204)으로 역으로 송신하고, 그 동작 상태는 이어서 경로(916)를 통해 애플리케이션 관리자(201)에게 알려진다. 예를 들어, 사용자가 사용자 인터페이스 애플리케이션 확장자(205)를 현재 활용하는 중인 것으로 판정되는 경우, 애플리케이션 관리자(201)는 사용자를 방해하지 않기 위해 애플리케이션(204)을 종료하는 것을 연기할 수 있다. 대안으로, 애플리케이션(204)은 IPC 프레임워크를 통해 애플리케이션 확장자(205)와 직접적으로 통신하여, 사용자가 애플리케이션 확장자(205)를 현재 이용하는 중인지 여부를 판정할 수 있다.
다른 실시예에 따르면, 소정 애플리케이션들의 애플리케이션 확장자들은 애플리케이션 확장자들을 통해 연관된 애플리케이션들의 기능들에 액세스하도록 중앙집중식 애플리케이션 또는 제어 센터에 의해 사용될 수 있다. 즉, 중앙집중식 애플리케이션 또는 제어 센터는 사용자가 대응하는 애플리케이션을 개별적으로 론칭할 필요 없이 다양한 애플리케이션들에 대한 중앙집중식 엔트리 포인트로서의 역할을 한다. 또한, 애플리케이션 확장자가 운영 체제에 의해 인스톨된 경우, 애플리케이션 확장자를 활성화/인에이블 또는 비활성화/디스에이블시키도록 하는 옵션이 사용자에게 제공된다. 예를 들어, 운영 체제의 애플리케이션 제어 센터(예컨대, 통지 센터)에 대한 인스톨된 애플리케이션의 인스톨된 애플리케이션 확장자는 호스팅 애플리케이션으로서 애플리케이션 제어 센터의 사용자 인터페이스 내에 디스플레이될 수 있다. 애플리케이션 제어 센터의 사용자 인터페이스는 사용자가 인스톨된 애플리케이션 확장자를 인에이블 또는 디스에이블시키게 하는 인에이블/디스에이블 옵션(예컨대, 아이콘과 같은 스위치 그래픽 표현)을 디스플레이할 수 있다. 애플리케이션 확장자는 애플리케이션 확장자가 인에이블된 경우에만 애플리케이션 제어 센터로부터 (예컨대, 연관된 인스톨된 애플리케이션의 기능들을 이용하기 위해) 액세스가능하고; 그렇지 않은 경우에, 사용자는 애플리케이션 확장자와 연관된 인스톨된 애플리케이션을 이용해야 한다.
도 10은, 본 발명의 일 실시예에 따른, 애플리케이션들의 각자의 확장자들을 통해 애플리케이션들에 액세스하기 위한 시스템을 도시한 블록 다이어그램이다. 도 10을 참조하면, 호스트 애플리케이션(1001)은, 스터브(stub)들 또는 그래픽 표현들(예컨대, 아이콘들)(1010, 1011)로 각각 나타내지는, 호스트 애플리케이션(1001)에 대해 특별히 설계된 애플리케이션들(1006, 1007)의 애플리케이션 확장자들(1004, 1005)의 리스트(1009)를 호스팅하도록 구성된다. 호스트 애플리케이션(1001)은 운영 체제의 통지 센터 또는 제어 센터일 수 있다. 애플리케이션 확장자들(1004, 1005)은 호스트 애플리케이션(1001)을 실행하는 것과는 상이한 샌드박스 환경들(1002, 1003)에서 론칭 및 실행될 수 있다. 애플리케이션 확장자들(1004, 1005)은 또한 그들의 연관된 애플리케이션들(1006, 1007)이 실행되는 것들과는 상이한 샌드박스 환경들에서 실행될 수 있다는 점에 유의한다. 중앙집중식 엔트리 포인트로서의 확장자 리스트(1009)로부터, 사용자는 애플리케이션들(1006, 1007)의 각자의 확장자들(1004, 1005)을 통해 애플리케이션들(1006, 1007)의 기능들에 액세스할 수 있다. 일 실시예에서, 호스트 애플리케이션(1001)은 사용자가 애플리케이션 확장자들(1010, 1011) 중 임의의 하나를 개별적으로 인에이블 또는 디스에이블(예컨대, 옵트-인(opt-in) 또는 옵트-아웃(opt-out))시키게 하는 구성 인터페이스(1008)를 포함한다.
도 11a 및 도 11b는, 본 발명의 일 실시예에 따른, 애플리케이션의 그래픽 사용자 인터페이스의 일례를 도시한 스크린샷들이다. 도 11a 및 도 11b를 참조하면, 스크린샷들은 도 10의 시스템(1000)에 의해 제시될 수 있다. GUI(1100)는 도 10의 호스트 애플리케이션(1001)과 같은 호스트 애플리케이션의 사용자 인터페이스를 나타낸다. 이러한 예에서, 애플리케이션(1100)은 Apple Inc.로부터의 iOS의 통지 센터와 같은 운영 체제의 애플리케이션 제어 센터를 나타낸다. 애플리케이션(1100)은 다양한 다른 애플리케이션들에 대한 다수의 스터브들 또는 엔트리 포인트들을 포함한다. 이러한 예에서, GUI는 다른 애플리케이션들의 활성화된 엔트리 포인트들을 리스팅하는 섹션, 및 다른 애플리케이션들의 비활성화된 엔트리 포인트들을 리스팅하는 섹션(1102)을 포함한다. 섹션(1101)에 리스팅된 스터브들 또는 엔트리 포인트들 각각은 대응하는 스위칭 아이콘을 스위칭함으로써 비활성화될 수 있는데, 이는 엔트리 포인트의 그래픽 표현을 섹션(1101)으로부터 섹션(1102)으로 이동시킬 것이다. 유사하게, 섹션(1102) 내의 엔트리 포인트들 각각은 활성화되어 섹션(1101)으로 이동될 수 있다.
일 실시예에서, 섹션들(1101, 1102) 내의 엔트리 포인트들 중 적어도 일부는 제3자 애플리케이션들로부터 확장된 애플리케이션 확장자들일 수 있고, 일부는 운영 체제에 의해 제공되는 애플리케이션들 또는 서비스들과 연관될 수 있다. 예를 들어, 애플리케이션(1103)은 제3자 애플리케이션(예컨대, 도 10의 애플리케이션(1007))일 수 있고, 반면에 애플리케이션(1104)은 운영 체제에 의해 제공되는 빌트인 애플리케이션 또는 서비스(예컨대, 도 10의 애플리케이션(1006))일 수 있다. 도 11a에 도시된 바와 같은 애플리케이션(1101)의 GUI로부터, 사용자는 그의 활성화된 엔트리 포인트를 통해 다른 애플리케이션에 액세스할 수 있다. 예를 들어, 사용자는 다른 애플리케이션의 플러그인을 나타내는 도 11a의 그래픽 표현(1103)을 클릭하여, 도 11b에 도시된 바와 같은 해당 특정 애플리케이션의 기능들에 액세스할 수 있다. 그 결과, 사용자는 이러한 예에서 통지 센터로부터의 다수의 애플리케이션들에 액세스할 수 있다. 사용자는 또한 종래의 방식으로 개별 애플리케이션들을 론칭함으로써 그들 애플리케이션들에 개별적으로 액세스할 수 있다.
도 12a 내지 도 12c는, 본 발명의 일 실시예에 따른, 애플리케이션의 그래픽 사용자 인터페이스의 일례를 도시한 스크린샷들이다. 도 12a 내지 도 12c를 참조하면, 스크린샷들은 도 10의 시스템(1000)에 의해 제시될 수 있다. 이러한 예에서, GUI(1200)는 열(row)(1202)에 리스팅된 다른 애플리케이션들 및 열(1203)에 리스팅된 서비스들에 나타내기 위해 시트들을 공유하도록 호스트 애플리케이션(1201)에 의해 제시될 수 있다. 열(1202)에 리스팅된 그래픽 표현들(이러한 예에서는 아이콘들)은 Twitter™ 및 Facebook™과 같은 다른 애플리케이션들로부터의 일부 애플리케이션 확장자들을 포함할 수 있다. 열들(1202, 1203)에서의 그들 확장자들 또는 서비스들 각각은 개별적으로 활성화 또는 비활성화될 수 있다. 예를 들어, 사용자가 열(1202) 및 열(1203) 내의 "More" 아이콘을 클릭하는 경우, 사용자가 도 12b 및 도 12c에 도시된 바와 같은 리스팅된 애플리케이션 확장자들 또는 서비스들 중 임의의 하나를 각각 개별적으로 구성하게 하는 구성 페이지가 디스플레이된다.
도 13은 본 발명의 일 실시예에서 사용될 수 있는 데이터 프로세싱 시스템의 일례를 도시한 블록 다이어그램이다. 예를 들어, 시스템(1300)은 전술된 프로세스들 또는 방법들 중 임의의 것을 수행하는, 전술된 데이터 프로세싱 시스템들 중 임의의 것을 나타낼 수 있다. 예를 들어, 시스템(1300)은 전술된 바와 같은 시스템들을 나타낼 수 있다. 시스템(1300)은 데스크톱(예컨대, 미국 캘리포니아주 쿠퍼티노 소재의 Apple Inc.로부터 입수가능한 iMac™), 랩톱(예컨대, MacBook™), 태블릿(예컨대, iPad™), 서버, 모바일 전화기(예컨대, iPhone™), 미디어 플레이어(예컨대, iPod™ 또는 iPod Touch™), PDA, 개인용 통신기(personal communicator), 게이밍 디바이스, 네트워크 라우터 또는 허브, 무선 AP(access point) 또는 리피터, 셋톱박스, 또는 이들의 조합을 나타낼 수 있다.
도 13을 참조하면, 일 실시예에서, 시스템(1300)은 프로세서(1301), 및 본 명세서에서 칩셋으로도 지칭되고 메모리(1303) 및 디바이스들(1305 내지 1308)을 비롯한 다양한 컴포넌트들을 버스 또는 상호접속부를 통해 프로세서(1301)에 커플링시키는 주변기기 인터페이스(1302)를 포함한다. 프로세서(1301)는 내부에 포함되는 단일 프로세서 코어 또는 다수의 프로세서 코어들을 갖는 단일 프로세서 또는 다수의 프로세서들을 나타낼 수 있다. 프로세서(1301)는 마이크로프로세서, CPU 등과 같은 하나 이상의 범용 프로세서들을 나타낼 수 있다. 더 구체적으로, 프로세서(1301)는 CISC(complex instruction set computing) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 또는 다른 명령어 세트들을 구현하는 프로세서, 또는 명령어 세트들의 조합을 구현하는 프로세서들일 수 있다. 프로세서(1301)는 또한 ASIC(application specific integrated circuit), FPGA(field programmable gate array), DSP(digital signal processor), 네트워크 프로세서, 그래픽 프로세서, 네트워크 프로세서, 통신 프로세서, 암호화 프로세서, 코-프로세서, 임베디드 프로세서, 또는 명령어들을 프로세싱할 수 있는 임의의 다른 타입의 로직과 같은 하나 이상의 특수 목적 프로세서들일 수 있다. 프로세서(1301)는 본 명세서에서 논의된 동작들 및 단계들을 수행하기 위한 명령어들을 실행시키도록 구성된다.
주변기기 인터페이스(1302)는 MCH(memory control hub) 및 ICH(input output control hub)를 포함할 수 있다. 주변기기 인터페이스(1302)는 메모리(1303)와 통신하는 메모리 제어기(도시되지 않음)를 포함할 수 있다. 주변기기 인터페이스(1302)는 또한 디스플레이 제어기 및/또는 디스플레이 디바이스를 포함할 수 있는 그래픽 서브시스템(1304)과 통신하는 그래픽 인터페이스를 포함할 수 있다. 주변기기 인터페이스(1302)는 AGP(accelerated graphics port), PCI(peripheral component interconnect) 익스프레스 버스, 또는 다른 타입들의 상호접속부들을 통해 그래픽 디바이스(1304)와 통신할 수 있다.
MCH는 때때로 노스브리지(Northbridge)로 지칭되고, ICH는 때때로 사우스브리지(Southbridge)로 지칭된다. 본 명세서에서 사용되는 바와 같이, MCH, ICH, 노스브리지 및 사우스브리지라는 용어들은 인터럽트 신호들을 프로세서를 향해서 통과시키는 것을 포함하는 기능들을 갖는 다양한 칩들을 커버하기 위해 넓게 해석되도록 의도된다. 일부 실시예들에서, MCH는 프로세서(1301)와 통합될 수 있다. 그러한 구성에서, 주변기기 인터페이스(1302)는 MCH 및 ICH의 일부 기능들을 수행하는 인터페이스 칩으로서 동작한다. 또한, 그래픽 가속기는 MCH 또는 프로세서(1301) 내에 통합될 수 있다.
메모리(1303)는 RAM(random access memory), DRAM(dynamic RAM), SDRAM(synchronous DRAM), SRAM(static RAM), 또는 다른 타입들의 저장 디바이스들과 같은 하나 이상의 휘발성 저장(또는 메모리) 디바이스들을 포함할 수 있다. 메모리(1303)는 프로세서(1301) 또는 임의의 다른 디바이스에 의해 실행되는 명령어들의 시퀀스들을 포함하는 정보를 저장할 수 있다. 예를 들어, 다양한 운영 체제들, 디바이스 드라이버들, 펌웨어(예컨대, 기본 입출력 시스템 또는 BIOS), 및/또는 애플리케이션들의 실행가능한 코드 및/또는 데이터는 메모리(1303)에 로딩될 수 있고, 프로세서(1301)에 의해 실행될 수 있다. 운영 체제는, 예를 들어 Microsoft®로부터의 Windows® 운영 체제, Apple로부터의 Mac OS®/iOS®, Google®로부터의 Android®, Linux®, Unix®, 또는 VxWorks와 같은 다른 실시간 또는 임베디드 운영 체제들과 같은 임의의 종류의 운영 체제들일 수 있다.
주변기기 인터페이스(1302)는 무선 송수신기(들)(1305), 입력 디바이스(들)(1306), 오디오 IO 디바이스(들)(1307), 및 다른 IO 디바이스들(1308)을 비롯한 디바이스들(1305 내지 1308)과 같은 IO 디바이스들에 대해 인터페이스를 제공할 수 있다. 무선 송수신기(1305)는 WiFi 송수신기, 적외선 송수신기, 블루투스 송수신기, WiMax 송수신기, 무선 셀룰러 전화 송수신기, 위성 송수신기(예컨대, GPS(global positioning system) 송수신기) 또는 이들의 조합일 수 있다. 입력 디바이스(들)(1306)는 마우스, 터치 패드, 터치 감응형 스크린(디스플레이 디바이스(1304)와 통합될 수 있음), 스타일러스와 같은 포인터 디바이스, 및/또는 키보드(예컨대, 물리적 키보드 또는 터치 감응형 스크린의 일부로서 디스플레이되는 가상 키보드)를 포함할 수 있다. 예를 들어, 입력 디바이스(1306)는 터치 스크린에 커플링된 터치 스크린 제어기를 포함할 수 있다. 터치 스크린 및 터치 스크린 제어기는, 예를 들어, 용량성, 저항성, 적외선 및 표면 탄성파(surface acoustic wave) 기술뿐만 아니라 다른 근접 센서 어레이 또는 터치 스크린과의 하나 이상의 접촉점들을 결정하기 위한 다른 요소들을 포함하지만 이로 한정되지 않는 복수의 터치 감응 기술들 중 임의의 것을 이용하여 이들의 접촉 및 이동 또는 단절을 검출할 수 있다.
오디오 IO(1307)는 음성 인식, 음성 복제, 디지털 녹음, 및 전화 통신 기능들과 같은 음성-인에이블형(voice-enabled) 기능들을 가능하게 하는 스피커 및/또는 마이크로폰을 포함할 수 있다. 다른 선택적 디바이스들(1308)은 저장 디바이스(예컨대, 하드 드라이브, 플래시 메모리 디바이스), USB(universal serial bus) 포트(들), 병렬 포트(들), 직렬 포트(들), 프린터, 네트워크 인터페이스, 버스 브리지(예컨대, PCI-PCI 브리지), 센서(들)(예컨대, 모션 센서, 광 센서, 근접 센서 등), 또는 이들의 조합을 포함할 수 있다. 선택적 디바이스들(1308)은 사진들 및 비디오 클립들을 기록하는 것과 같은 카메라 기능들을 가능하게 하도록 활용되는, CCD(charged coupled device) 또는 CMOS(complementary metal-oxide semiconductor) 광 센서와 같은 광 센서를 포함할 수 있는 이미징 프로세싱 서브시스템(예컨대, 카메라)를 추가로 포함할 수 있다.
도 13이 데이터 프로세싱 시스템의 다양한 컴포넌트들을 도시하고 있지만, 그것은 컴포넌트들을 상호접속시키는 임의의 특정 아키텍처 또는 방식을 나타내도록 의도되지 않는다는 점에 유의해야 하는데; 이는 그러한 세부사항들이 본 발명의 실시예들과 밀접한 관련이 없기 때문이다. 또한, 네트워크 컴퓨터들, 핸드헬드 컴퓨터들, 모바일 전화기들, 및 더 적은 컴포넌트들 또는 아마도 더 많은 컴포넌트들을 갖는 다른 데이터 프로세싱 시스템들이 또한 본 발명의 실시예들과 함께 사용될 수 있다는 것이 이해될 것이다.
상기의 상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 알고리즘들 및 심볼 표현들의 관점에서 제시되었다. 이들 알고리즘 설명들 및 표현들은 데이터 처리 분야의 당업자에 의해 사용되어 그의 작업 요지를 다른 당업자에게 가장 효과적으로 전하기 위한 방식들이다. 알고리즘은 여기서, 그리고 일반적으로, 바람직한 결과로 이어지는 동작들의 자기-무모순 시퀀스(self-consistent sequence)인 것으로 이해된다. 그 동작들은 물리적 양들의 물리적 조작을 요구하는 것들이다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리적 양들과 연관되며 단지 이들 양에 적용된 편리한 라벨들임을 명심해야 한다. 상기 논의로부터 자명한 바와 같이, 명시적으로 달리 언급되지 않는 한, 설명 전반에 걸쳐, 하기의 청구범위에서 기술되는 것들과 같은 용어들을 사용한 논의는 컴퓨터 시스템의 레지스터 및 메모리 내의 물리적 (전자적) 양으로 표현되는 데이터를, 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적 양으로 유사하게 표현되는 다른 데이터로 조작 및 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스의 작용 및 프로세스를 지칭한다는 것이 이해된다.
도면에 도시된 기법들은 하나 이상의 전자 디바이스들 상에서 저장 및 실행되는 코드 및 데이터를 이용하여 구현될 수 있다. 그러한 전자 디바이스들은 컴퓨터 판독가능 매체들, 예컨대 비일시적 컴퓨터 판독가능 저장 매체들(예를 들어, 자기 디스크들; 광 디스크들; RAM; ROM; 플래시 메모리 디바이스들; 상 변화 메모리) 및 일시적 컴퓨터 판독가능 송신 매체들(예를 들어, 전기, 광, 음향, 또는 다른 형태의 전파된 신호들 - 예컨대, 반송파들, 적외선 신호들, 디지털 신호들)을 이용하여 코드 및 데이터를 저장하고 (네트워크를 통해 내부적으로 그리고/또는 다른 전자 디바이스들과) 통신한다.
전술된 도면에 도시된 프로세스들 또는 방법들은 하드웨어(예컨대, 회로, 전용 로직 등), 펌웨어, 소프트웨어(예컨대, 비일시적 컴퓨터 판독가능 매체 상에서 구현됨), 또는 이들 모두의 조합을 포함하는 프로세싱 로직에 의해 수행될 수 있다. 프로세스들 또는 방법들이 일부 순차적 동작들의 관점에서 전술되어 있지만, 기술된 동작들 중 일부는 상이한 순서로 수행될 수 있다는 것이 이해되어야 한다. 또한, 일부 동작들은 순차적인 대신에 동시에 수행될 수 있다.
상기 명세서에서, 본 발명의 실시예들은 그들의 특정의 예시적인 실시예들을 참조하여 기술되었다. 다음의 청구범위에 기재된 바와 같은 본 발명의 보다 넓은 사상 및 범주로부터 벗어남이 없이 그에 대해 다양한 수정들이 이루어질 수 있음이 명백할 것이다. 이에 따라서, 명세서 및 도면들은 한정적 의미보다는 오히려 예시적 의미에서 고려되어야 한다.

Claims (27)

  1. 컴퓨터 구현 방법으로서,
    운영 체제의 복수의 확장 포인트들 중 제1 확장 포인트와 연관된 확장 서비스에 대해 제1 애플리케이션 - 상기 제1 애플리케이션은 제1 샌드박스 환경 내에서 실행됨 - 으로부터 수신된 질의에 응답하여, 상기 제1 확장 포인트에 대해 상기 운영 체제에 등록된 하나 이상의 확장자들(extensions)의 리스트를 식별하는 단계;
    사용자가 상기 확장자들 중에서 상기 제1 애플리케이션과 연관될 하나의 확장자를 선택하도록 프롬프트하기 위해 확장자들의 상기 식별된 리스트 - 상기 리스트 내의 상기 확장자들 각각은 상기 제1 확장 포인트와 연관된 동일한 세트의 권한(entitlement)들에 의해 제한됨 - 를 디스플레이하는 단계; 및
    상기 확장자들 중 하나의 확장자의 선택에 응답하여, 제2 샌드박스 환경에서 상기 선택된 확장자 - 상기 선택된 확장자 및 제2 애플리케이션은 애플리케이션 번들로 패키징되었고, 상기 선택된 확장자 및 상기 제2 애플리케이션은 상기 애플리케이션 번들로부터 인스톨되었고, 상기 선택된 확장자 및 상기 제2 애플리케이션은 상기 운영 체제의 레지스트리에서 개별 엔트리들로서 나타남 - 를 론칭하는 단계를 포함하는, 컴퓨터 구현 방법.
  2. 제1항에 있어서, 실행 시, 상기 선택된 확장자 및 상기 제2 애플리케이션은 적어도 하나의 공통 라이브러리 또는 애플리케이션 프레임워크에 액세스하는, 컴퓨터 구현 방법.
  3. 제2항에 있어서, 상기 제1 애플리케이션은 상기 제2 애플리케이션을 실행시킬 필요 없이 상기 제1 확장 포인트를 통해 상기 선택된 확장자에 의해 제공되는 기능에 액세스하는, 컴퓨터 구현 방법.
  4. 제1항에 있어서, 상기 애플리케이션 번들은 상기 제2 애플리케이션의 제1 실행가능 파일, 상기 제1 실행가능 파일을 설명하는 메타데이터를 갖는 제1 메타데이터 파일, 상기 선택된 확장자의 제2 실행가능 파일, 및 상기 선택된 확장자를 설명하는 메타데이터를 갖는 제2 메타데이터 파일을 포함하고, 상기 제2 메타데이터 파일은 상기 제1 확장 포인트를 식별하는 정보를 포함하는, 컴퓨터 구현 방법.
  5. 제4항에 있어서, 론칭 데이터베이스에서 상기 제1 확장 포인트를 식별하는 정보를 저장하는 것을 포함해서 상기 운영 체제에서 상기 애플리케이션 번들을 인스톨하는 단계를 추가로 포함하고, 상기 하나 이상의 확장자들의 리스트를 식별하는 단계는 저장되어 있는 상기 제1 확장 포인트를 식별하는 정보에 기초하여 상기 선택된 확장자를 식별하도록 상기 론칭 데이터베이스에 액세스하는 단계를 포함하는, 컴퓨터 구현 방법.
  6. 제4항에 있어서, 상기 리스트 내의 확장자들 각각은 상기 제1 확장 포인트에 대해 특별히 설계된 확장 템플릿을 이용하여 개발자에 의해 개발되었고, 상기 제2 실행가능 파일은 사전결정된 세트의 라이브러리들을 이용하여 컴파일되어, 관련되지 않은 기능들이 배제되게 하는, 컴퓨터 구현 방법.
  7. 제1항에 있어서, 상기 제2 샌드박스 환경에서 상기 선택된 확장자를 론칭하는 단계는 IPC(inter-process communication) 프레임워크를 이용하는 상기 제1 확장 포인트를 통해, 상기 제1 샌드박스 환경 내에서 구동되는 상기 제1 애플리케이션과 상기 제2 샌드박스 환경 내에서 구동되는 상기 선택된 확장자 사이에서의 통신을 가능하게 하는 단계를 포함하는, 컴퓨터 구현 방법.
  8. 삭제
  9. 데이터 프로세싱 시스템으로서,
    프로세서; 및
    상기 프로세서에 커플링되어 명령어들을 저장하기 위한 메모리를 포함하고,
    상기 명령어들은, 상기 메모리로부터 실행될 때, 상기 프로세서로 하여금,
    운영 체제의 복수의 확장 포인트들 중 제1 확장 포인트와 연관된 확장 서비스에 대해 제1 애플리케이션 - 상기 제1 애플리케이션은 제1 샌드박스 환경 내에서 실행됨 - 으로부터 수신된 질의에 응답하여, 상기 제1 확장 포인트에 대해 상기 운영 체제에 등록된 하나 이상의 확장자들의 리스트를 식별하게 하고,
    사용자가 상기 확장자들 중에서 상기 제1 애플리케이션과 연관될 하나의 확장자를 선택하도록 프롬프트하기 위해 확장자들의 상기 식별된 리스트 - 상기 리스트 내의 상기 확장자들 각각은 상기 제1 확장 포인트와 연관된 동일한 세트의 권한들에 의해 제한됨 - 를 디스플레이하게 하고,
    상기 확장자들 중 하나의 확장자의 선택에 응답하여, 제2 샌드박스 환경에서 상기 선택된 확장자 - 상기 선택된 확장자 및 제2 애플리케이션은 애플리케이션 번들로 패키징되었고, 상기 선택된 확장자 및 상기 제2 애플리케이션은 상기 애플리케이션 번들로부터 인스톨되었고, 상기 선택된 확장자 및 상기 제2 애플리케이션은 상기 운영 체제의 레지스트리에서 개별 엔트리들로서 나타남 - 를 론칭하게 하는, 데이터 프로세싱 시스템.
  10. 제9항에 있어서, 실행 시, 상기 선택된 확장자 및 상기 제2 애플리케이션은 적어도 하나의 공통 라이브러리 또는 애플리케이션 프레임워크에 액세스하는, 데이터 프로세싱 시스템.
  11. 제10항에 있어서, 상기 제1 애플리케이션은 상기 제2 애플리케이션을 실행시킬 필요 없이 상기 제1 확장 포인트를 통해 상기 선택된 확장자에 의해 제공되는 기능에 액세스하는, 데이터 프로세싱 시스템.
  12. 제9항에 있어서, 상기 애플리케이션 번들은 상기 제2 애플리케이션의 제1 실행가능 파일, 상기 제1 실행가능 파일을 설명하는 메타데이터를 갖는 제1 메타데이터 파일, 상기 선택된 확장자의 제2 실행가능 파일, 및 상기 선택된 확장자를 설명하는 메타데이터를 갖는 제2 메타데이터 파일을 포함하고, 상기 제2 메타데이터 파일은 상기 제1 확장 포인트를 식별하는 정보를 포함하는, 데이터 프로세싱 시스템.
  13. 제12항에 있어서, 상기 애플리케이션 번들은 상기 운영 체제에서 인스톨되고, 상기 인스톨하는 것은 론칭 데이터베이스에서 상기 제1 확장 포인트를 식별하는 정보를 저장하는 것을 포함하고, 상기 하나 이상의 확장자들의 리스트를 식별하는 것은 저장되어 있는 상기 제1 확장 포인트를 식별하는 정보에 기초하여 상기 선택된 확장자를 식별하도록 상기 론칭 데이터베이스에 액세스하는 것을 포함하는, 데이터 프로세싱 시스템.
  14. 제12항에 있어서, 상기 리스트 내의 확장자들 각각은 상기 제1 확장 포인트에 대해 특별히 설계된 확장 템플릿을 이용하여 개발자에 의해 개발되었고, 상기 제2 실행가능 파일은 사전결정된 세트의 라이브러리들을 이용하여 컴파일되어, 관련되지 않은 기능들이 배제되게 하는, 데이터 프로세싱 시스템.
  15. 제9항에 있어서, 상기 제2 샌드박스 환경에서 상기 선택된 확장자를 론칭하는 것은 IPC 프레임워크를 이용하는 상기 제1 확장 포인트를 통해, 상기 제1 샌드박스 환경 내에서 구동되는 상기 제1 애플리케이션과 상기 제2 샌드박스 환경 내에서 구동되는 상기 선택된 확장자 사이에서의 통신을 가능하게 하는 것을 포함하는, 데이터 프로세싱 시스템.
  16. 확장 서비스들을 제공하기 위한 컴퓨터 구현 방법으로서,
    콘텐츠 프로세싱 서비스를 호출하기 위한, 호스트 애플리케이션으로부터의 요청에 응답하여, 상기 요청된 콘텐츠 프로세싱 서비스를 제공할 수 있는 콘텐츠 프로세싱 확장자를 식별 및 로딩하는 단계;
    상기 콘텐츠 프로세싱 확장자로부터 데이터 변환 코드 - 상기 데이터 변환 코드는 상기 콘텐츠 프로세싱 확장자 내에 내장됨 - 를 획득하는 단계;
    상기 호스트 애플리케이션 내에서 상기 데이터 변환 코드를 실행시키는 단계;
    상기 실행된 데이터 변환 코드를 이용하여 상기 호스트 애플리케이션에 의해 제시되는 콘텐츠를 분석하여, 상기 콘텐츠 중에서 상기 콘텐츠 프로세싱 확장자에 의해 프로세싱될 필요가 있는 부분을 식별하는 단계;
    콘텐츠 프로세싱을 위해 상기 콘텐츠의 상기 식별된 부분을 상기 콘텐츠 프로세싱 확장자로 송신하는 단계; 및
    프로세싱된 콘텐츠가 상기 콘텐츠 프로세싱 확장자로부터 수신된 것에 응답하여, 상기 실행된 데이터 변환 코드가 상기 프로세싱된 콘텐츠를 상기 호스트 애플리케이션에 의해 제시되는 상기 콘텐츠와 통합시키는 단계를 포함하는, 컴퓨터 구현 방법.
  17. 제16항에 있어서, 상기 데이터 변환 코드는, 실행 시, 데이터를 상기 호스트 애플리케이션과 상기 콘텐츠 프로세싱 확장자 사이에서 호환 가능한 포맷으로 패키징하는 것이고, 상기 데이터 변환 코드는 운영 체제 이외의 제3자 개발자에 의해 개발된 확장자 내에서 패키징되는, 컴퓨터 구현 방법.
  18. 제16항에 있어서, 상기 호스트 애플리케이션 및 상기 콘텐츠 프로세싱 확장자는 확장 포인트를 통해 서로 통신하고, 상기 확장 포인트는 운영 체제의 복수의 확장 포인트들 - 각각의 확장 포인트는 소정 세트의 사전정의된 API(application programming interface)들 및 소정 세트의 사전정의된 리소스 권한들에 대응함 - 중 하나이고, 각각의 확장 포인트는 애플리케이션의 사전정의된 기능을 다른 애플리케이션으로 확장하도록 공통 인터페이스를 정의하는, 컴퓨터 구현 방법.
  19. 제16항에 있어서, 상기 데이터 변환 코드는 상기 확장자 내에 내장된 실행가능한 스크립트인, 컴퓨터 구현 방법.
  20. 제16항에 있어서, 상기 호스트 애플리케이션은 브라우저 애플리케이션이고, 상기 확장자는 상기 브라우저 애플리케이션에 의해 제시되는 상기 콘텐츠의 상기 부분을 번역하도록 구성된 번역 확장자인, 컴퓨터 구현 방법.
  21. 명령어들이 저장된 비일시적 컴퓨터 판독가능 매체로서,
    상기 명령어들은, 프로세서에 의해 실행될 때, 상기 프로세서로 하여금, 제1항 내지 제7항 또는 제16항 내지 제20항 중 어느 한 항에 따른 방법을 수행하게 하는, 비일시적 컴퓨터 판독가능 매체.
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
KR1020167032361A 2014-05-29 2015-04-29 확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트 KR101872141B1 (ko)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US201462004778P 2014-05-29 2014-05-29
US201462004780P 2014-05-29 2014-05-29
US201462004777P 2014-05-29 2014-05-29
US62/004,777 2014-05-29
US62/004,778 2014-05-29
US62/004,780 2014-05-29
US14/488,122 US9684547B2 (en) 2014-05-29 2014-09-16 Method and apparatus for handling security of an application and its extension
US14/488,126 2014-09-16
US14/488,122 2014-09-16
US14/488,126 US9811393B2 (en) 2014-05-29 2014-09-16 Consistent extension points to allow an extension to extend functionality of an application to another application
PCT/US2015/028203 WO2015183456A1 (en) 2014-05-29 2015-04-29 Consistent extension points to allow an extension to extend functionality of an application to another application

Publications (2)

Publication Number Publication Date
KR20160147862A KR20160147862A (ko) 2016-12-23
KR101872141B1 true KR101872141B1 (ko) 2018-06-27

Family

ID=54701857

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167032361A KR101872141B1 (ko) 2014-05-29 2015-04-29 확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트

Country Status (3)

Country Link
US (6) US9811393B2 (ko)
KR (1) KR101872141B1 (ko)
CN (1) CN106462476B (ko)

Families Citing this family (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9930310B2 (en) 2009-09-09 2018-03-27 Apple Inc. Audio alteration techniques
US10762204B2 (en) * 2013-11-28 2020-09-01 Blackberry Limited Managing containerized applications
US9692789B2 (en) 2013-12-13 2017-06-27 Oracle International Corporation Techniques for cloud security monitoring and threat intelligence
US9811393B2 (en) * 2014-05-29 2017-11-07 Apple Inc. Consistent extension points to allow an extension to extend functionality of an application to another application
US10445396B2 (en) 2014-05-31 2019-10-15 Apple Inc. Device, method, and graphical user interface for extending functionality of a host application to another application
CN105471824A (zh) * 2014-09-03 2016-04-06 阿里巴巴集团控股有限公司 实现浏览器调用本地业务组件的方法、装置及系统
US9542247B2 (en) * 2014-09-19 2017-01-10 Microsoft Technology Licensing, Llc Content sharing between sandboxed apps
US9575740B2 (en) * 2015-01-21 2017-02-21 Samsung Electronics Co., Ltd. Apparatus and method for running multiple instances of a same application in mobile devices
WO2016117096A1 (ja) * 2015-01-22 2016-07-28 富士通株式会社 アプリケーション機能拡張方法、アプリケーション機能拡張プログラム、及びアプリケーション機能拡張装置
KR102320149B1 (ko) * 2015-02-16 2021-11-01 삼성전자주식회사 어플리케이션을 실행하는 전자 장치 및 그 제어 방법
US9875150B2 (en) * 2015-06-02 2018-01-23 Apple Inc. Method and system for processing notifications amongst applications of a data processing system
US10585727B1 (en) 2015-06-08 2020-03-10 Google Llc API manager
US10282539B2 (en) * 2015-06-12 2019-05-07 AVAST Software s.r.o. Authentication and secure communication with application extensions
US11113086B1 (en) 2015-06-30 2021-09-07 Fireeye, Inc. Virtual system and method for securing external network connectivity
US10726127B1 (en) 2015-06-30 2020-07-28 Fireeye, Inc. System and method for protecting a software component running in a virtual machine through virtual interrupts by the virtualization layer
US10395029B1 (en) * 2015-06-30 2019-08-27 Fireeye, Inc. Virtual system and method with threat protection
US10642753B1 (en) 2015-06-30 2020-05-05 Fireeye, Inc. System and method for protecting a software component running in virtual machine using a virtualization layer
US20170060650A1 (en) * 2015-08-28 2017-03-02 Ncr Corporation Dynamic service extensibility
US10437828B2 (en) * 2015-12-18 2019-10-08 Sap Se Controlled reference process extensibility framework
CN107015794B (zh) * 2015-12-18 2021-07-06 Sap欧洲公司 软件即服务参考流程扩展验证框架
CN106919581A (zh) * 2015-12-24 2017-07-04 北京奇虎科技有限公司 一种浏览器的防护方法及装置
US10536478B2 (en) * 2016-02-26 2020-01-14 Oracle International Corporation Techniques for discovering and managing security of applications
US10776072B2 (en) * 2016-03-29 2020-09-15 Intel Corporation Technologies for framework-level audio device virtualization
CN107357600B (zh) * 2016-05-10 2022-05-13 中兴通讯股份有限公司 一种应用分享装置及方法
US11112963B2 (en) 2016-05-18 2021-09-07 Apple Inc. Devices, methods, and graphical user interfaces for messaging
KR102636000B1 (ko) 2016-05-18 2024-02-08 애플 인크. 그래픽 메시징 사용자 인터페이스 내의 확인응답 옵션들의 적용
US10785175B2 (en) * 2016-06-12 2020-09-22 Apple Inc. Polling extension application for interacting with a messaging application
US9990128B2 (en) 2016-06-12 2018-06-05 Apple Inc. Messaging application interacting with one or more extension applications
US10607386B2 (en) 2016-06-12 2020-03-31 Apple Inc. Customized avatars and associated framework
US10595169B2 (en) 2016-06-12 2020-03-17 Apple Inc. Message extension app store
US10194288B2 (en) 2016-06-12 2019-01-29 Apple Inc. Sticker distribution system for messaging apps
US10554599B2 (en) 2016-06-12 2020-02-04 Apple Inc. Conversion of detected URL in text message
US10505872B2 (en) 2016-06-12 2019-12-10 Apple Inc. Messaging application interacting with one or more extension applications
US11088973B2 (en) 2016-06-12 2021-08-10 Apple Inc. Conversion of text relating to media content and media extension apps
US10852912B2 (en) 2016-06-12 2020-12-01 Apple Inc. Image creation app in messaging app
US10368208B2 (en) 2016-06-12 2019-07-30 Apple Inc. Layers in messaging applications
CA2972178A1 (en) * 2016-06-29 2017-10-05 Sphere 3D Inc. Systems and methods for emulating resources using abstract containerization with abstract categorization and policy setting
US10277631B1 (en) * 2016-07-08 2019-04-30 Sprint Communications Company L.P. Self-preserving policy engine and policy-based content transmission
AU2017341674B2 (en) 2016-10-12 2022-06-30 Gray, Ruth Configurable wireless power control and management
KR102303665B1 (ko) * 2017-03-29 2021-09-17 삼성전자주식회사 플러그인 서비스를 포함하는 결제 서비스 제공 방법 및 그 전자장치
US10861210B2 (en) 2017-05-16 2020-12-08 Apple Inc. Techniques for providing audio and video effects
US10592311B2 (en) * 2017-09-28 2020-03-17 Microsoft Technology Licensing, Llc Computing device resource management
KR101997061B1 (ko) * 2017-09-29 2019-07-05 숭실대학교산학협력단 리눅스 기반 안드로이드 컨테이너 플랫폼, 이를 탑재한 장치 및 리눅스 기반 안드로이드 컨테이너 환경에서의 보안 시스템 구축 방법
US11343304B2 (en) * 2017-11-20 2022-05-24 Parallels International Gmbh System and method for sharing electronic data using a mobile device
US11062030B2 (en) * 2018-03-09 2021-07-13 Huawei Technologies Co., Ltd. Systems and methods for managing access control between processes in a computing device
US11281767B2 (en) * 2018-03-23 2022-03-22 International Business Machines Corporation Secure system state extraction software extensibility via plugin sandboxing
US11461279B2 (en) 2018-03-26 2022-10-04 Apple Inc. Share pools for sharing files via a storage service
CN108600529B (zh) * 2018-04-09 2020-12-04 北京小米移动软件有限公司 信息交互方法、装置及计算机可读存储介质
US11188353B2 (en) * 2018-07-12 2021-11-30 Vmware, Inc. Runtime extension system for bundled web application
EP3825832A4 (en) * 2018-09-11 2021-09-08 Huawei Technologies Co., Ltd. PROCEDURE FOR SHARING DATA, GRAPHIC USER INTERFACE AND ELECTRONIC DEVICE AND SYSTEM
US20200099738A1 (en) * 2018-09-24 2020-03-26 Citrix Systems, Inc. Systems and methods for bridge protocol between diverse applications
US11029970B2 (en) * 2018-10-24 2021-06-08 Sap Se Operating system extension framework
US11061696B2 (en) 2019-01-22 2021-07-13 Servicenow, Inc. Extension points for web-based applications and services
CN110109718B (zh) * 2019-03-26 2023-06-02 创新先进技术有限公司 一种应用程序接口调用方法及装置
CN110083465B (zh) * 2019-04-26 2021-08-17 上海连尚网络科技有限公司 一种寄宿应用间的数据传递方法
US11556546B2 (en) 2019-06-01 2023-01-17 Apple Inc. People suggester using historical interactions on a device
US11792242B2 (en) 2019-06-01 2023-10-17 Apple Inc. Sharing routine for suggesting applications to share content from host application
CN112711436B (zh) * 2019-10-25 2023-09-26 北京奇艺世纪科技有限公司 消息处理方法及装置
US11295007B2 (en) 2019-12-03 2022-04-05 Tableau Software, LLC Sandboxed application extensions
CN111427705B (zh) * 2020-03-16 2023-05-02 北京字节跳动网络技术有限公司 一种数据同步方法及装置
US11507863B2 (en) 2020-05-21 2022-11-22 Apple Inc. Feature determination for machine learning to suggest applications/recipients
KR20220030081A (ko) * 2020-09-02 2022-03-10 삼성전자주식회사 전자장치 및 그 제어방법
CN112399216B (zh) * 2020-10-27 2023-05-09 维沃移动通信(杭州)有限公司 资源分享方法、装置和电子设备
CN112434284B (zh) * 2020-10-29 2022-05-17 格物钛(上海)智能科技有限公司 一种基于沙箱环境的机器学习训练平台实现
EP4064053A1 (en) * 2021-03-26 2022-09-28 Aptiv Technologies Limited Managing inter-service communication
US20220391223A1 (en) * 2021-06-08 2022-12-08 Red Hat, Inc. Adding expressiveness to plugin extensions using integration with operators
US11782690B2 (en) * 2021-06-29 2023-10-10 Dell Products L.P. Delivering applications over-the-air while supporting original equipment manufacturer markers
CN114020444B (zh) * 2022-01-05 2022-05-10 阿里云计算有限公司 一种企业数字中台中资源服务应用的调用系统和方法
WO2024035430A1 (en) * 2022-08-10 2024-02-15 Visa International Service Association Isolating application and software development kit sandboxes for security protection
WO2024072117A1 (ko) * 2022-09-30 2024-04-04 삼성전자 주식회사 전자 장치 및 어플리케이션 간의 통신 방법

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6209018B1 (en) 1997-11-13 2001-03-27 Sun Microsystems, Inc. Service framework for a distributed object network system
US20070239985A1 (en) * 2006-03-30 2007-10-11 Microsoft Corporation Secure extensions
US20080168479A1 (en) 2007-01-05 2008-07-10 Thomas Joseph Purtell Bypass Virtualization
WO2010054235A2 (en) * 2008-11-10 2010-05-14 Google Inc. Safe browser plugins using native code modules
US7895594B2 (en) 2005-03-28 2011-02-22 Freescale Semiconductor, Inc. Virtual machine extended capabilities using application contexts in a resource-constrained device
US20130055285A1 (en) * 2011-08-26 2013-02-28 Microsoft Corporation Discovery and activation of application extensions

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7694328B2 (en) 2003-10-21 2010-04-06 Google Inc. Systems and methods for secure client applications
JP4579030B2 (ja) * 2004-06-02 2010-11-10 株式会社リコー 情報処理装置、ファイル処理方法、ファイル処理プログラム及び記録媒体
US7660999B2 (en) 2004-06-22 2010-02-09 Microsoft Corporation MIME handling security enforcement
US8661420B2 (en) * 2004-08-03 2014-02-25 Oracle International Corporation System and method for runtime interface versioning
US20060218488A1 (en) * 2005-03-28 2006-09-28 Microsoft Corporation Plug-in architecture for post-authoring activities
US7721281B1 (en) * 2005-07-01 2010-05-18 Cisco Technology, Inc. Methods and apparatus for securing local application execution
WO2007113709A1 (en) 2006-03-30 2007-10-11 Koninklijke Philips Electronics N.V. Method and apparatus for assigning an application to a security restriction
US8104048B2 (en) * 2006-08-04 2012-01-24 Apple Inc. Browsing or searching user interfaces and other aspects
US8272048B2 (en) 2006-08-04 2012-09-18 Apple Inc. Restriction of program process capabilities
US10416838B2 (en) * 2006-12-11 2019-09-17 Oath Inc. Graphical messages
US20080301142A1 (en) 2007-06-03 2008-12-04 Im-Prove Llc Method and system for organizing and presenting construction knowledge-sharing tools
US8429741B2 (en) 2008-08-29 2013-04-23 Google, Inc. Altered token sandboxing
US8230341B2 (en) * 2008-11-26 2012-07-24 Eyecon Ip Holding Unified media devices controlling using pre-defined functional interfaces
US8745361B2 (en) * 2008-12-02 2014-06-03 Microsoft Corporation Sandboxed execution of plug-ins
KR101515859B1 (ko) * 2008-12-05 2015-05-06 삼성전자 주식회사 디스플레이장치 및 그 컨텐츠 리스트 표시 방법
US8626802B2 (en) * 2009-07-24 2014-01-07 Apple Inc. Dynamic media content previews
CN103626777B (zh) 2009-07-29 2015-10-21 内尔维阿诺医学科学有限公司 Plk抑制剂的盐类
US8479286B2 (en) 2009-12-15 2013-07-02 Mcafee, Inc. Systems and methods for behavioral sandboxing
US8850572B2 (en) * 2010-01-15 2014-09-30 Apple Inc. Methods for handling a file associated with a program in a restricted program environment
US8468455B2 (en) * 2010-02-24 2013-06-18 Novell, Inc. System and method for providing virtual desktop extensions on a client desktop
US9021468B1 (en) 2010-05-18 2015-04-28 Google Inc. Bundling extension installation with web browser installation
US8473961B2 (en) 2011-01-14 2013-06-25 Apple Inc. Methods to generate security profile for restricting resources used by a program based on entitlements of the program
US8631482B2 (en) 2010-05-28 2014-01-14 Apple Inc. Method for managing computer resources accessed by a program operating in a restricted environment
US8943550B2 (en) 2010-05-28 2015-01-27 Apple Inc. File system access for one or more sandboxed applications
US20120110064A1 (en) * 2010-11-01 2012-05-03 Google Inc. Content sharing interface for sharing content in social networks
US8898255B2 (en) * 2010-11-08 2014-11-25 Sony Corporation Network digital signage solution
CN102087594B (zh) * 2010-12-27 2013-11-27 用友软件股份有限公司 扩展点和插件的管理方法和装置
US8671416B2 (en) 2011-01-14 2014-03-11 Apple Inc. Dynamic service discovery
US20130298006A1 (en) 2011-07-20 2013-11-07 Ourgroup, Inc. System and method for providing software tools within an online platform for organizing groups and communicating with member clients of group
US8869068B2 (en) 2011-11-22 2014-10-21 Backplane, Inc. Content sharing application utilizing radially-distributed menus
US10467058B2 (en) 2011-12-20 2019-11-05 Microsoft Technology Licensing, Llc Sandboxing for multi-tenancy
WO2013152431A1 (en) * 2012-04-12 2013-10-17 Absolute Software Corporation Configuration of third party applications in a sandboxed environment
US8972969B2 (en) * 2012-06-08 2015-03-03 Adobe Systems Incorporated Out of band services updates
KR102005315B1 (ko) * 2012-07-23 2019-07-30 삼성전자 주식회사 클라우드 서비스 지원 방법과 시스템 및 이를 지원하는 단말기
US20140059443A1 (en) 2012-08-26 2014-02-27 Joseph Akwo Tabe Social network for media topics of information relating to the science of positivism
US9069766B2 (en) * 2012-11-02 2015-06-30 Microsoft Technology Licensing, Llc Content-based isolation for computing device security
US9473562B2 (en) 2013-09-12 2016-10-18 Apple Inc. Mediated data exchange for sandboxed applications
US9811393B2 (en) * 2014-05-29 2017-11-07 Apple Inc. Consistent extension points to allow an extension to extend functionality of an application to another application

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6209018B1 (en) 1997-11-13 2001-03-27 Sun Microsystems, Inc. Service framework for a distributed object network system
US7895594B2 (en) 2005-03-28 2011-02-22 Freescale Semiconductor, Inc. Virtual machine extended capabilities using application contexts in a resource-constrained device
US20070239985A1 (en) * 2006-03-30 2007-10-11 Microsoft Corporation Secure extensions
US20080168479A1 (en) 2007-01-05 2008-07-10 Thomas Joseph Purtell Bypass Virtualization
WO2010054235A2 (en) * 2008-11-10 2010-05-14 Google Inc. Safe browser plugins using native code modules
US20130055285A1 (en) * 2011-08-26 2013-02-28 Microsoft Corporation Discovery and activation of application extensions

Also Published As

Publication number Publication date
US20150347749A1 (en) 2015-12-03
US20220308941A1 (en) 2022-09-29
KR20160147862A (ko) 2016-12-23
US9811393B2 (en) 2017-11-07
US10503564B2 (en) 2019-12-10
US9563488B2 (en) 2017-02-07
US20150347748A1 (en) 2015-12-03
US9684547B2 (en) 2017-06-20
US20150347200A1 (en) 2015-12-03
CN106462476B (zh) 2019-09-17
US20170212794A1 (en) 2017-07-27
CN106462476A (zh) 2017-02-22
US20170185768A1 (en) 2017-06-29
US11379273B2 (en) 2022-07-05

Similar Documents

Publication Publication Date Title
KR101872141B1 (ko) 확장자가 애플리케이션의 기능을 다른 애플리케이션으로 확장하게 하는 고정적 확장 포인트
US10445396B2 (en) Device, method, and graphical user interface for extending functionality of a host application to another application
WO2015183456A1 (en) Consistent extension points to allow an extension to extend functionality of an application to another application
US9208328B2 (en) Security system and method for operating systems
US10417031B2 (en) Selective virtualization for security threat detection
TWI420338B (zh) 安全之瀏覽器基礎應用程式
US10528735B2 (en) Malicious code protection for computer systems based on process modification
JP6192534B2 (ja) 仮想アプリケーション拡張ポイント
US20150332043A1 (en) Application analysis system for electronic devices
KR101565230B1 (ko) 샌드박스에 참조들을 유지하는 시스템 및 방법
US9202046B2 (en) Systems and methods for executing arbitrary applications in secure environments
JP5985631B2 (ja) 信頼レベルのアクティブ化
US20090193491A1 (en) Secure element manager
WO2019072008A1 (zh) 小程序的安全扫描方法、装置以及电子设备
US8601439B2 (en) Networked program dependency compatibility analysis
US9888070B2 (en) Brokered advanced pairing
US9672356B2 (en) Determining malware status of file
US10997285B2 (en) Selectively blocking the loading of a privileged application
WO2022128143A1 (en) Protection of a computer system and its software from installing and running software applications on incompatible platforms
Michéle et al. Digital Television and Smart TVs
Gomez et al. BlackBerry PlayBook Security: Part one
Davidson Enhancing Mobile Security and Privacy through App Splitting
KR20130140930A (ko) 격리된 실행 환경 제공 시스템 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant