JOIN/SIGN UP
Already a Member? |
GET INVOLVED
Understanding and Engaging in COVESA Expert Groups & Projects |
COLLABORATIVE PROJECTS
HISTORICAL
SDV Telemetry Project - On Hold |
We use cookies on this site to enhance your user experience. By using this site, you are giving your consent for us to set cookies. |
Wiki page for logging review comments and discussions.
Base version:
Concept document
GENIVI Application Framework
7th July 2016
Document Author: Simon McVittie
Document Reviewer: Sjoerd Simons
Document Reviewer: Philip Withnall
Document Reviewer: Guy Lunardi
Document Owner: Collabora - Guy Lunardi
E-mail: guy.lunardi@collabora.com
Tel: : \+1-801-200-3848
Collabora Document Number: GEN0001
Collabora Document Version: v0.3 (draft)
Author Date Version Change Approved
SM 29-06-2016 0.1 Initial version SM
SM 04-07-2016 0.2 Revised internal version SS
GL 23-06-2016 0.3 First draft shared with GENIVI GL
link to the document : Application Framework scope and requirements
This document outlines requirements relevant to the GENIVI Application Framework effort. However some of these requirements may well be considered out of scope for requirements to the GENIVI Application Framework due to overlap with other GENIVI initiatives. They are included here as they are perceived to be within the context of an application framework. This document does not aim to specify a particular implementation for any requirement. The terms privilege, privilege boundary, confidentiality, integrity and availability have their usual information-security meanings (for definitions, please refer to Apertis Security design). This document is authored by Collabora. The content of this document is made available under the Attribution-ShareAlike 4.0 International license (CC BY-SA 4.0).
NOTE: Initial IDs are assigned equal to the line number in the original document.
ID | Text |
---|---|
25 | There are two commonly-used definitions of an "app": either a user-facing launchable program (an entry point) such as would appear in launcher menus, or a user-installable package or bundle such as would appear in an app store. |
Comments: GN - info - Within GENIVI scope, 'Managed Apps' and 'Native Applications' has been defined GA: A fair assumption is that a bundle will never contain both managed and native apps and an app is either native or managed. I think we are fine with the current definitions and they can be used in combination with the defintions here without any conflict between them. GA: A clear definition of "bundle" would help here (because of later usage e.g. entry-points) GM: Please clarify how this definition is related to "Managed Applications" and "Native Applications" as defined inside the GENIVI Reference Architecture GM: Also "package or bundle" should be better defined (notice that the GENIVI Compliance Specification already defines a "Package Manager") PW: ‘bundle’ is defined on line 27 as a concept similar to an app on Android, for example. The definition is refined over the course of the document. We could try and expand the summary here a bit. GA: This week 2016-11-08 it seems we said that Bundle = A collection of zero or more executable files, zero or more libraries and zero or more meta-data files (for the last case imagine for example a "Skinning/theming bundle containing Icon graphics and configuration files only.". In an app store what would be presented to the user as one app would technically be downloaded as one bundle of files. | |
Extracted requirement: |
ID | Text |
---|---|
28 | A user-installable bundle would most commonly have exactly one entry point. However, it might not have any entry points at all, for example if it is a theme or some other extension for the operating system. Conversely, it might have more than one entry point: for example, a user-installable bundle for an audio player might contain separate menu items for music and audiobooks, launching different executables or the same executable in different modes to provide an appropriate UX for each use-case. |
Comments: GN : Ok, Multi entry points for Apps need to be translated into requirement. GA: Put definitions at top, e.g. what is a bundle according to our previous discussions. | |
Extracted requirement: |
ID | Text |
---|---|
34 | In this document, when we need to distinguish between the two meanings, we will say that a user-installable bundle contains zero or more entry points. Entry points are similar in scope to Android activities. |
Comments: GN :OK GA: I am still not sure that the Android comment helps. From android docs: "An Android Activity is an application component that provides a screen with which users can interact in order to do something". Activity requires a graphical view? Is that also required for each entry point? Let's put down an actual definition table at the start of this document - for bundles, entry-points, etc. PW: You're right. Entry points do not require a graphical view. I agree with putting a definition of entry points at the start of the document. | |
Extracted requirement: |
ID | Text |
---|---|
37 | Some vendors might decide to restrict the apps available in their app stores to have at most one entry point, but that is a policy decision by those vendors and should not be reflected in the more general app framework. |
Comments: GN : Should vendor specific config be a part of manifest? PW: Vendor-specific configuration should be a part of the vendor’s platform policy, which will be encoded in their app store guidelines, and implementations of vendor-specific components in the platform. Manifests contain metadata, which should be kept separate from policy. It would be redundant to encode a general vendor-wide policy of “maximum number of entry points” in the manifest for each app. Type: INFO. | |
Extracted requirement: |
ID | Text |
---|---|
40 | Entry points might be written as native code (for example compiled from C or C++), or they might run under an interpreter or JIT in a runtime environment that provides GUI functionality analogous to native code (for example if the app is written in Java, Python, or JavaScript for the node.js, gjs or seed runtime environments), or they might run in a HTML5 runtime environment. We treat all of these as fundamentally similar: they result in the execution of app-author-chosen code. |
Comments: GN : OK GA: OK GM: OK Type: INFO | |
Extracted requirement: |
ID | Text |
---|---|
46 | (Note that whether an app is written in native code has no bearing on whether it is what GENIVI calls a native application, which is an app that is built into the platform, or a managed application, which is one of the user-installable apps discussed here: either may be written in either native code or an interpreted/JITted environment.) |
Comments: GA: Good paragraph but I would consider if the words "compiled code" are any help here. PW: I suspect that ‘compiled code’ was chosen against, because a large variety of programming languages are ‘compiled’, even if the end result is managed or native code. The term ‘native code’ is loosely defined on line 40 — does the definition need to be bolstered? | |
Extracted requirement: |
ID | Text |
---|---|
50 | The app framework must be capable of running native-code (C or C++) executables. |
Comments: GA: Policy decision? If we're aiming for one framework to rule them all, I guess I agree. If we are aiming for a shared requirement set for many different environments, it might not be true. PW: The approach we’ve taken is that applications written in interpreted or managed languages are treated as the combination of their interpreter and the code, where the interpreter is invariably native code. So native code support is always required. However, this would be an unnecessary complication on systems which only have managed/interpreted apps. This could be changed to be a policy detail; I don’t know what the consequences would be for the rest of the document. GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
51 | The app framework must be capable of running programs that require an interpreter/JIT-based runtime environment such as Java or Python. It may require that the runtime environment provides suitable library functionality to work with the framework (for example, if the framework uses D-Bus for IPC, then it does not need to support runtime environments that do not have a D-Bus implementation or binding). |
Comments: GA: See previous GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
56 |
|
Comments: GA: See previous GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
59 |
|
Comments: GA: See below | |
Extracted requirement: |
ID | Text |
---|---|
64 |
|
Comments: GA: So the definition is that these are not entry-points. Entry-points require a GUI is the definition PW: No, the definition on line 59 is that entry points may be GUIs or background services. The definition on line 26 does not contradict this, but could be clarified as it currently sounds like an entry point must have a GUI. That’s not the case. PW: Note that we could cross-reference this to ~line 28. | |
Extracted requirement: |
ID | Text |
---|---|
69 |
|
Comments: GA: OK GM: OK | |
Extracted requirement: |
ID | Text |
---|---|
71 | Some vendors might decide to restrict the apps available in their app stores to have at most one executable, or to have at most one GUI and one non-GUI executable, but that is a policy decision by those vendors and should not be reflected in the more general app framework. |
Comments: GA: OK GN : OK GM : OK Type: INFO | |
Extracted requirement: |
ID | Text |
---|---|
75 | Each bundle should have bundle metadata to represent the app in situations like an app store, a system settings GUI or a prompt requesting app permissions. |
Comments: GA: OK GN : OK GM : OK Type: Requirement | |
Extracted requirement: |
ID | Text |
---|---|
77 |
|
Comments: GA: OK GN : Need to define a minimum set as mandatory requirement including privileges/permissions Type: REQ | |
Extracted requirement: |
ID | Text |
---|---|
79 |
|
Comments: GA: OK GN : OK GM : OK Type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
83 |
|
Comments: GA: OK GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
87 |
|
Comments: GA: OK GN:OK Type:REQ | |
Extracted requirement: |
ID | Text |
---|---|
91 |
|
Comments: GA: OK GN:OK Type:REQ | |
Extracted requirement: |
ID | Text |
---|---|
95 |
|
Comments: GA: Discussion point. Shall we define this and if so what to choose? PW: It should be standardised if and only if the metadata format is standardised, as discussed on line 87. If so, we recommend AppStream XML, plus ancillary files for custom metadata. GA: OK. I propose we make AppStream XML a recommended format. Are there any other format proposals? PW: None from me. For reference, here's the Apertis specification for it: https://appdev.apertis.org/documentation/bundle-spec.html#bundle-metadata | |
Extracted requirement: |
ID | Text |
---|---|
99 | Apps are expected to be numerous.
|
Comments: GA: OK GN: OK Type: REQ | |
Extracted requirement: |
ID | Text |
---|---|
103 |
|
Comments: GA: OK GN: OK GM: OK Type: REQ | |
Extracted requirement: |
ID | Text |
---|---|
107 | The app framework must provide a location where app programs can write their private data. |
Comments: GA: I would rephrase "location" to mechanism. There are several ways to do this, one would be through a defined interface, like GENIVI Persistence Client Library GN : Is this expected to have a separate set of API's. PW: We used ‘location’ because Apertis does not require use of a persistence library (robustness is left to the file system and kernel to implement), but it could be rephrased to ‘mechanism’. The only API defined here is the existence and path of the shared location. | |
Extracted requirement: |
ID | Text |
---|---|
109 | Open question: is this in-scope for the app framework, or is there some other platform component that does it? |
Comments: GA: The deep implementation of persistence must be a platform issue. The API for applications should be defined here. We must discuss the solution and the app-to-platform interface
| |
Extracted requirement: |
ID | Text |
---|---|
111 | The framework should provide a location that is treated as private data in which to store cached data, defined as data that can be recovered in a straightforward way by downloading it from the Internet or computing it from non-cached data. |
Comments: GA: OK GN: should be ok. | |
Extracted requirement: |
ID | Text |
---|---|
114 |
|
Comments: GA: OK. (This is a requirement on the framework but also needs to also go into app writing guidelines) GN : OK. GM : OK | |
Extracted requirement: |
ID | Text |
---|---|
116 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
121 | The app framework must provide a mechanism by which an app program's private data can all be deleted by another system component, for example as part of removal or a factory reset. |
Comments: GN : Ok as requirement. GA: OK | |
Extracted requirement: |
ID | Text |
---|---|
124 | The app framework should provide a mechanism by which all app programs' private data can be deleted in a single operation during a factory reset, so that the factory reset procedure does not need to enumerate app programs and iterate through them. |
Comments: GA: OK | |
Extracted requirement: |
ID | Text |
---|---|
127 | Deleting per-user data and per-device data during a factory reset is also anticipated to be necessary, but is outside the scope of this framework. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
130 | App processes should run in a sandbox which partially isolates them from the rest of the system. |
Comments: GA: OK GN : OK GM : OK Type : Info ? | |
Extracted requirement: |
ID | Text |
---|---|
132 | We anticipate that each app bundle will act as a security domain, similar to the concept of an origin on the Web: in other words, there is a security boundary between each pair of appbundles, but for simplicity there is no privilege boundary within an app bundle (for example between two programs in the same app bundle). |
Comments: GA: OK GN: OK GM: OK | |
Extracted requirement: |
ID | Text |
---|---|
136 | Each app is assumed to store private data which is specific to that app. On a multi-user system, this private data is also specific to a user: in other words, there is one private data location per (app, user) pair. |
Comments: GA: The later descriptions are clearer. I might suggest rewriting this first paragraph. GN: same as above Type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
139 |
|
Comments: GN : Is this list final or only an example? PW: It’s meant as an example. Type : | |
Extracted requirement: |
ID | Text |
---|---|
143 |
|
Comments: GN :OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
145 |
|
Comments: GN :OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
149 | Note that the App confidentiality requirement below imposes a stronger requirement than this: the first app must not even be able to know that the second app's private data exists. |
Comments: GN :OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
152 | Some categories of data might be specific to a single app but common to all users. We call these per-app data. |
Comments: GN :OKtype : Info | |
Extracted requirement: |
ID | Text |
---|---|
154 |
|
Comments: GN :OK | |
Extracted requirement: |
ID | Text |
---|---|
162 |
|
Comments: GN : Is this list final or only set of way of handling? PW: It’s an example. Type : | |
Extracted requirement: |
ID | Text |
---|---|
166 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
170 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
174 |
|
Comments: GN: OK GA: "Write" is general. As requirements go, additional precision might be needed, e.g. delete != modify? | |
Extracted requirement: |
ID | Text |
---|---|
178 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
183 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
188 | Some categories of data are not necessarily specific to a single app or to a single user; instead, they might be shared between all apps and between all users, like Android's /sdcard. We call these per-device data. |
Comments: GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
191 |
|
Comments: GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
198 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
200 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
202 |
|
Comments: GN:OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
208 |
|
Comments: GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
215 |
|
Comments: GN: OK type: REQ GA: Needs some more details. Eg. is (direct) communication between apps even possible? User consent is a policy question? PW: We could expand on this a bit, but since this section is about file system access, it would be a bit distracting to devote a lot of discussion to inter-app communication. The idea in Apertis is that apps cannot talk directly to each other — any communication is mediated via an IPC service for ‘data sharing’ which can enforce permissions on which apps can talk to each other. These permissions might involve user consent (the precise policy is, as you say, a question of vendor policy). GA: OK, I think that makes sense. | |
Extracted requirement: |
ID | Text |
---|---|
218 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
221 | Resource limits: A malicious, compromised or buggy app might use more than its fair share of system resources, including CPU cycles, RAM, storage (flash) or network bandwidth. |
Comments: GN : OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
223 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
225 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
229 | A very simple app, for example a calculator or a simple to-do list, might not need to do anything other than the operations allowed to all apps: display a GUI when launched, run code in a sandbox, store its own private data up to some reasonable limit, and so on. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
232 | To carry out its designed purpose, a more complex app might need permission to carry out actions that can compromise confidentiality (user privacy), integrity, or availability (the absence of denial-of-service). For example, a more elaborate to-do list app might be able to synchronize the to-do list to a cloud service, requiring it to have Internet access which would make it technically able to copy whatever data it can read to a location not under the user's control; it might ask to read the user's geographical location, to provide locationbased reminders; and it might support attaching photos to its to-do items, requiring it to read files that are not its private data. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
240 | Some permissions have technical constraints that makes it impractical to request user permission before they are used. For example, one possible permission flag is "has unrestricted Internet access", which might be used for a voice-over-IP client app. To support this control, the life-cycle manager would need to launch the app program with unrestricted Internet access either allowed or forbidden: it cannot be adjusted later. |
Comments: GA: "before they are used" really means "on-demand" or "interactively"? Internet access, system might also ask consent on first use. PW: Yes. In this case, we’re talking about situations where an entire session in an app would need to be torn down and recreated in order to change its behaviour after being granted/denied permission. [App FW telco - 15-11-2016] Its agreed to change to "on demand". Provide possibility for having permissions before launch and after launch. | |
Extracted requirement: |
ID | Text |
---|---|
245 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
251 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
254 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
258 | Some operations that cross privilege boundaries naturally include an opportunity for the user to reject the operation. To minimize driver distraction, the system should provide that opportunity instead of having a separate permission prompt. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
261 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
267 |
|
Comments: GA: I would say framework shall require all privilege-boundary-crossing operations to be declared... (why not?). I mean they need to be declared - not every operation might be in the category that requires user acceptance. User acceptance and declaration are orthogonal concepts in my view of this. PW: I see no problem with declaring them all in advance. As you say, declaring which permissions an application might request is orthogonal to whether those permissions are actually granted at request time. [App FW telco - 15-11-2016] : agreed | |
Extracted requirement: |
ID | Text |
---|---|
273 |
|
Comments: Type: Information | |
Extracted requirement: |
ID | Text |
---|---|
277 |
|
Comments: GA: As indicated above, I would change "declared in advance" to "require user acceptance" or similar. Discuss and improve. PW: I think we can treat declaring permissions as orthogonal to user authorisation of an app requesting those permissions in this case too. In this case, an example permission would be “let this app use my Facebook account to upload a photo”. If the permission is declared for the app, there are several policies which could be used at the time the app actually tries to start the upload: unconditionally allow the request, unconditionally deny the request, always ask the user, or ask the user if this is the first time the permission has been requested and use the answer from last time otherwise. I would agree with you, but I suspect that we should leave the exact policy to the vendors. [App FW telco - 15-11-2016] similar to ID-267 | |
Extracted requirement: |
ID | Text |
---|---|
283 | A bundle may contain zero or more entry points. These are typically started from a launcher, which might take the form of a home screen, main menu or application list.| |
Comments: GA: OK, although I think it's a little unclear with reference to the defintion. OpenDocument(mimetype) is also an entry point right? At least if it brings up a GUI, but it won't be on the home screen. Only some entrypoints will? PW: Correct, that’s why it says ‘typically’ rather than ‘always’. We could rephrase this to ‘for example, these might be started from…’? [App FW telco - 15-11-2016] : Have the entry point topic collated together and make it explicit. | |
Extracted requirement: |
ID | Text |
---|---|
285 |
|
Comments: GA: Only those entrypoints that are not OpenDocument() type... PW: There seems to be some confusion here over entry points which handle opening content by its content type (equivalently, its MIME type). Any entry point, including those which are listed in the launcher, can declare that it handles a list of content types. An entry point does not have to be listed in the launcher to declare that it handles a list of content types, either. For example, the Apertis music application has four entry points: three (artists, songs, albums) are listed in the launcher and don’t handle opening content; and a fourth (the ‘now playing’ view) is not listed in the launcher but does handle opening content (audio/mpeg, etc.). Different entry points within the same applications bundle can advertise different lists of content types they handle. Phrased differently, the set of entry points which handle opening content and the set of entry points listed in the launcher do not have to be disjoint or equal. [App FW telco - 15-11-2016] : As agreed above wrt to entry points. | |
Extracted requirement: |
ID | Text |
---|---|
290 |
|
Comments: GA: OK | |
Extracted requirement: |
ID | Text |
---|---|
293 |
|
Comments: GA: First part is OK but decision needs discussion. Does .desktop imply also the syntax? E.g. ini-file style...? PW: .desktop implies the syntax, standard field names and semantics, and rules for defining custom fields. http://standards.freedesktop.org/desktop-entry-spec/latest/ GA: OK. Let's make .desktop format a recommended format. Are there any other proposals? PW: I have no other proposals. For reference, here's the Apertis specification for it: https://appdev.apertis.org/documentation/bundle-spec.html#entry-points [App FW telco - 15-11-2016] : agreed. | |
Extracted requirement: |
ID | Text |
---|---|
297 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
301 | For example, this could be achieved by namespacing new metadata fields using a DNS name (as is done in D-Bus), namespacing them with a URI (as is done in XML), or using the X-Vendor-NewMetadataField convention (as is done in email headers, HTTP headers and freedesktop.org .desktop files). |
Comments: GA: Yes. Needs discussion, to decide something. GA: Did anyone make notes from previous call discussion? I don't understand what people prefer here - make proposals, vote, and reach a conclusion. PW: Guru said he was taking notes, but they haven't materialised here yet. From what I remember, this question is determined by the choice of metadata format for entry points. So since we've decided to go with .desktop files, the namespacing must use the X-Vendor-NewMetadataField scheme. [App FW telco - 15-11-2016] : Agreed. | |
Extracted requirement: |
ID | Text |
---|---|
305 |
|
Comments: GA: OK. Not sure if this is a requirement from any OEM (to have a use-installable launcher). It could be implemented using an app permission, or by having "native" privileged APIs not available to any app. [App FW telco - 15-11-2016] PW : e.g. third party call on system bus may not be allowed.As this needs fine grain access control. This can complicate or make things complex. GA : Agreed to go ahead with the existing requirement | |
Extracted requirement: |
ID | Text |
---|---|
309 | Some entry points might be flagged to not be visible in menus. For example, an app that is a viewer for some file type such as PDF might register itself as a handler for files of that type, but might not have anything useful to do if it appears in menus otherwise. |
Comments: GA: This seems to be a policy question. Requirement is only to make this possible? GA: (I need another discussion on definition of entry point, visible vs background apps etc...) PW: It’s not really a policy question, it’s more of an implementation question for the app developer. In the case of an entry point for handling PDF files, if the app doesn’t do anything unless given the path to a PDF file, it’s not going to make sense to display that entry point in menus on any vendor’s system. JK: OK for another use case (e.g. hide an app icon from the launcher w/o removing) but agreed w/ Gunnar. The use case above is based on the assumption that an entry point to handling PDF shall be defined as other entry points having an icon, which needs discussion. [App FW telco - 15-11-2016] : This should be left to the policy handling | |
Extracted requirement: |
ID | Text |
---|---|
312 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
313 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
316 | When the user selects an entry point, the expectation is that the program that implements that entry point should be launched. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
318 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
320 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
323 | We do not anticipate that ordinary (non-launcher) app bundles would have a reason to launch specific entry points in this way: we expect that if app bundles need to communicate, they will do so via document launching, URI launching or data sharing. This does not preclude one executable in a bundle from running another executable in the same bundle directly. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
328 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
330 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
331 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
336 | However, a vendor-specific Settings app is part of the platform rather than being a user-installable app bundle, so the constraints applying to it and the APIs that can be used with it do not have to be the same as for app bundles. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
339 | This would also be easy to implement without launching the Settings app by name: the built-in Settings app could register for URI launching as the launcher of a URI scheme, similar to the way the iOS Settings app used to register the prefs URI scheme, and the user-installable app could launch a URI of that scheme. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
344 | Some app entry points will provide handlers for particular file types. |
Comments: GN : | |
Extracted requirement: |
ID | Text |
---|---|
345 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
348 |
|
Comments: GN : This needs to be translated into requirement. GA: IETF, but a human readable name also needed right? PW: We assume that there is a separate mapping from IETF media types to human readable names for the file types. This exists as the Shared MIME-Info database on Linux systems. [App FW telco - 15-11-2016] : Agreed | |
Extracted requirement: |
ID | Text |
---|---|
353 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
357 |
|
Comments: GN :Could you provide a use case why such a requirement is needed? PW: This would be needed if an app needed to save files in a format which does not currently have a standard content-type, and then have those files launch it when they are selected in the file manager. i.e. The cases where an app needs to register a new entry in the MIME magic database. \\\\\\\\\\\\\\\\\\\\\\\\\\\ GA: IMHO the possibility to do it is a requirement. To allow it or not is OEM policy. PW: Agreed, if we want to allow it at all (see the discussion below). JK: Agreed [App FW telco - 15-11-2016] : Agreed. | |
Extracted requirement: |
ID | Text |
---|---|
359 |
|
Comments: GN :Could you provide a use case why such a requirement is needed? PW: The use case for preventing this is to prevent applications from assigning conflicting content types to existing files. A file can only have one content type, and if the MIME magic database is coerced into assigning the wrong type for it, the file will end up being opened with the wrong application. \\\\\\\\\\\\\\\\\\\\\\\\\\\ GA: Let's dig deeper into the risks/opportunities of this. Mitigation for conflicts? Do you mean can be defined at run-time or can be defined in manifest? PW: MIME type associations would have to be defined in manifests. They cannot be defined at application run-time because the system needs to know the magic bytes for a file type before it can work out which application to launch it with. However, manifests are trusted to have been audited when the application was submitted to the vendor, so we should be able to trust that each manifest only defines MIME types for file formats under control of that application’s author. And hence we should be able to guarantee there are no conflicts. So overall, I think I disagree with this part of the document (that allowing new MIME types to be defined is a risk), and think we should be able to allow it safely. [App FW telco - 15-11-2016] : GA : Rephrase as a recommendation to the policy maker. PW - Agreed. | |
Extracted requirement: |
ID | Text |
---|---|
363 | If this is implemented at all, we recommend that it should be tightly controlled by app-store curators. |
Comments: GA: Supplementary text / guideline. OK. | |
Extracted requirement: |
ID | Text |
---|---|
365 |
|
Comments: GN : Ok | |
Extracted requirement: |
ID | Text |
---|---|
369 |
|
Comments: GN : OK as Requirement | |
Extracted requirement: |
ID | Text |
---|---|
374 |
|
Comments: GN : OK as requirement. | |
Extracted requirement: |
ID | Text |
---|---|
376 |
|
Comments: GN : Error handling requirement and choice should be left to vendor/OE specific handling PW: I think the intention here is that the error handling is left as a policy decision for the vendor. [App FW telco - 15-11-2016] : Vendor specific. OK | |
Extracted requirement: |
ID | Text |
---|---|
380 |
|
Comments: GN : Ok as requirement. | |
Extracted requirement: |
ID | Text |
---|---|
384 |
|
Comments: GN : Error handling requirement and choice should be left to vendor/OE specific handling PW: All behaviour apart from what is required here is left as a policy decision for the vendor. The features mandated in this line are needed for security — not feeding back an error code is required to prevent acting as an oracle for the number of apps installed which can handle the given content type, which is an indicator of which apps the user has installed (especially for uncommon content types). GA: The possibility of user confirmation seems to be repeated from previous text. Simplify? PW: Are you referring to line 369? I don’t think there’s any harm in explicitly repeating the possibility here. [App FW telco - 15-11-2016] OK | |
Extracted requirement: |
ID | Text |
---|---|
388 |
|
Comments: GN : Error handling requirement and choice should be left to vendor/OE specific handling PW: See my comment for ID 384. [App FW telco - 15-11-2016] OK | |
Extracted requirement: |
ID | Text |
---|---|
392 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
394 |
|
Comments: GN : Could this be a vendor specific. It could be that system has not reached a state / condition which is a prerequisite for the launch an any app. PW: We were assuming that the system would either pause the app launch until it is in a state to launch apps, or not allow entry points to be spawned until that time. i.e. That it can synchronise on its own state. | |
Extracted requirement: |
ID | Text |
---|---|
396 |
|
Comments: GN : What could be a requirement for App FW? PW: I suggest the final sentence becomes the requirement. [App FW telco - 15-11-2016] : OK | |
Extracted requirement: |
ID | Text |
---|---|
402 |
|
Comments: GN : OK. | |
Extracted requirement: |
ID | Text |
---|---|
407 |
|
Comments:GN :OK, what requirement can be framed from this? PW: I don’t think there is a concrete requirement in either direction here. [App FW telco - 15-11-2016] : Info text | |
Extracted requirement: |
ID | Text |
---|---|
409 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
420 | Apertis Content Hand-over Use Cases contains some similar requirements-capture that was carried out for the Apertis platform. |
Comments: GN:OK | |
Extracted requirement: |
ID | Text |
---|---|
423 | Some app entry points will provide handlers for particular URI schemes such as https, mailto or skype.| |
Comments: GN:OK | |
Extracted requirement: |
ID | Text |
---|---|
425 |
|
Comments: GN:OK | |
Extracted requirement: |
ID | Text |
---|---|
427 |
|
Comments: GN : Can this be a requirement? PW: Yes. In general I think that anything phrased as ‘must’ in the document should become a requirement. [App FW telco - 15-11-2016] : GN : Its a part of manifest field, PW - Yes its a std key | |
Extracted requirement: |
ID | Text |
---|---|
430 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
434 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
437 |
|
Comments: GN : Could this be a vendor specific. It could be that system has not reached a state / condition which is a prerequisite for the launch an any app. PW: See my comments on ID 394. [App FW telco - 15-11-2016] : OK | |
Extracted requirement: |
ID | Text |
---|---|
439 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
443 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
446 |
|
Comments: GN : How this can be achieved? or is this always routed through system UI. Can this be a vendor specific for how to handle? PW: I think this needs to be URI-scheme-specific for how to handle it. It could be vendor specific, but vendors will likely come up with the same approaches since the problems are fairly constrained. I don’t have any more suggestions for how this could be achieved beyond what’s in the examples. [App FW telco - 15-11-2016] : OK. PW : Need to extract req from this. | |
Extracted requirement: |
ID | Text |
---|---|
454 | Similarly, if a URI scheme is designed in such a way that dereferencing a URI can cause content to be modified or deleted (an unsafe request in HTTP terminology), then the program interpreting the URI should ask the user before proceeding. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
457 | Apertis Content Hand-over Use Cases contains some related requirements-capture that was carried out for the Apertis platform. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
460 | App programs might wish to interact with data stored in locations that are not naturally accessible to the app. For example, an attachment to an email would be private data for the email app as run by the user whose email account is accessing it. However, we would like to avoid such data passing through a per-device data storage area that is shared between all apps (similar to Android's /sdcard), because in practice data passed between programs will typically include sensitive data such as photos and documents. |
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
467 | The solution that is used in Apple's iOS and planned for the Flatpak system is to have an API call that creates a file-opening or file-saving dialog. While visually presented as if it was part of the requesting app, this dialog actually exists outside the app's security context (it is privileged), and it is able to browse all of the user's files. iOS calls this the Document Picker, while Flatpak calls it the Document Portal. |
Comments: GN : OKtype : INFO | |
Extracted requirement: |
ID | Text |
---|---|
472 |
|
Comments: GN : OKtype : Info | |
Extracted requirement: |
ID | Text |
---|---|
475 |
|
Comments: GN:OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
477 |
|
Comments: GN : OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
479 |
|
Comments: GN : OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
481 |
|
Comments: GN : OKtype : REQ | |
Extracted requirement: |
ID | Text |
---|---|
484 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
486 |
|
Comments: GN : What do yo mean by specialized versions? what probably can be covered? PW: For example, by providing an image preview in the file selection dialogue. This can be clarified in the text. [App FW telco - 15-11-2016] : GA : Replace functionality with more explicit info. PW : OK | |
Extracted requirement: |
ID | Text |
---|---|
489 | The system might require the ability to enumerate the implementations of a particular service or set of functionality. In this document we will refer to that set of functionality as an interface. One use-case for this is that a global search facility within the platform needs to discover a list of background services (entry points) within app bundles that can provide search results in response to user queries entered into some global search UI; for example, a Spotify client could use the search term to match artists or songs. |
Comments: GN:OK type : UseCase | |
Extracted requirement: |
ID | Text |
---|---|
495 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
497 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
499 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
502 | An app might also require the ability to enumerate the implementations of a particular interface. One example use-case here is that if an app will display a Sharing menu similar to the UX seen in Android, it needs to be able to list the apps with which files or data can be shared, in order to populate that menu. Due to the app confidentiality requirement, this should only be allowed if the interface in question is one whose implementors are aware that it will result in other apps being able to enumerate their apps. In this document we will refer to this as a public interface. |
Comments: GN : OK type : UseCase and info | |
Extracted requirement: |
ID | Text |
---|---|
509 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
511 |
|
Comments: GN : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
514 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
517 |
|
Comments: GN : similar to ID 499 | |
Extracted requirement: |
ID | Text |
---|---|
520 | The Apertis Interface Discovery design and Apertis Data Sharing design describe use-cases, requirements and proposed implementations for this topic in the Apertis system. |
Comments: GN : OK type : info | |
Extracted requirement: |
ID | Text |
---|---|
523 | One specific use-case for data sharing is a menu for sharing content with other users, for example via social media, email or real-time communications, similar to the Android Sharing menu. |
Comments: GN : OK type : UseCase | |
Extracted requirement: |
ID | Text |
---|---|
526 | Two possible UXs for this facility are presented in the Apertis Sharing design. Each UX motivates rather different requirements for how this facility interacts with apps, and in particular its impact on app confidentiality. |
Comments: GN : OK type : info | |
Extracted requirement: |
ID | Text |
---|---|
529 | Open question: Is this in the scope of the application framework? If it is, which UX do we intend to support? |
Comments: GN : Ux is not in the scope of App FW. However any interface that need to be exposed to UX should be taken care of. PW: UX is not in scope, indeed; but we need to know which of the UXs needs to be supported (both?), as it affects the underlying API. [App FW telco - 15-11-2016] : OK, agreed. | |
Extracted requirement: |
ID | Text |
---|---|
532 | Under various circumstances (including those described in app launching, document launching, URI launching and data sharing), the system must be able to start a program provided by an app bundle. |
Comments: GN : OK GM : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
535 | This topic overlaps with the functionality of the GENIVI Node Startup Controller, and more generally the GENIVI Lifecycle cluster. It should potentially be considered to be an orthogonal topic outside the scope of the App Framework design. Some requirements in this area are outlined here in the hope that they can be used to clarify the division of responsibilities. |
Comments: GN : OK GM : OK type : info | |
Extracted requirement: |
ID | Text |
---|---|
540 | The possible states of a program in an app are as follows: |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Comments: GN : When in the Running state how the background or foreground of an app is handled? If this is left to the App how App FW will not about which apps been shown in foreground and which are in background? PW: It’s assumed that the foreground/background state of an application is basically orthogonal to its inactive/running/paused state, to the extent that inactive apps have no processes running; running apps can be in the background or foreground; paused apps can be in the background or foreground (but the (paused, foreground) state probably only makes sense transitionally). Multiple apps could be (running, foreground) if the vendor supported presenting multiple apps on the screen at once (i.e. a tiling window manager). type : REQ [App FW telco - 15-11-2016] : PW : this is covered in LCM f/w, GA, GN : Its a different philosophy. Here we need it at the App Level. agreed. | |
Extracted requirement: |
ID | Text |
---|---|
552 | Transitions do not skip a step: for example, a paused app process cannot be stopped without first unpausing it, and an app bundle cannot be removed until all of its processes have been stopped. |
Comments: GN : OK GM : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
555 | Open question: some GENIVI documents have the concept of "activating" a program, which appears to be distinct from launching it. Does this correspond to selection, similar to single-clicking an icon in a desktop environment where double-clicking would cause launching; or does it represent a transition away from an intermediate state where a newly installed app is unavailable until an activation, enabling or licensing step has been performed, similar to the concept of activating a Windows installation; or is it something else? |
Comments: GA: Please reference the document in question. PW: I’m not sure which document Simon was referring to. I’ll try to find out. | |
Extracted requirement: |
ID | Text |
---|---|
562 | As a prerequisite for sandboxing and security, app processes must be identifiable. |
Comments: GN : OK GM : OK type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
563 |
|
Comments: GN : Can this be a vendor specific? PW: I suspect the mechanism for starting processes will be vendor-specific. The requirement that the app framework must be able to start processes is a requirement for all vendors. type : REQ | |
Extracted requirement: |
ID | Text |
---|---|
565 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
572 |
|
Comments: GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
576 | The application launch has various interactions with the graphical user interface. See Apertis Compositor Security design for more detailed requirements-capture for the interaction between the GUI shell and apps. The Apertis design assumes that the compositor and the GUI shell are combined, as was done in Apertis' Mildenhall reference UI and in GNOME's GNOME Shell. In a system where the GUI shell and compositor are separate, those requirements should be read as being requirements for the combined system consisting of the GUI shell and the compositor. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
583 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
587 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
591 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
597 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
601 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
605 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
608 | To improve perceived responsiveness, the GUI shell might display an indication that a particular entry point or app is starting. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
610 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
615 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
617 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
620 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
623 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
628 | An app program might have costly graphical processing which its author wants it to stop doing while not visible. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
630 | Open question: Are these requirements regarding visibility applicable to the application framework, or to life-cycle management, or are they in the scope of the compositor or the combined system consisting of the compositor and GUI shell? |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
633 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
636 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
639 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
642 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
647 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
650 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
653 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
655 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
659 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
661 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
664 | If the system has a relatively large amount of RAM but a relatively slow CPU, it might be desirable to pause app processes that been sent to the background, preventing them from executing code. For example, the implementation might use SIGSTOP. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
667 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
669 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
671 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
674 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
676 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
679 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
682 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
686 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
687 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
689 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
691 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
696 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
700 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
704 | Under some circumstances, other system components might forbid an app from being launched. For example, if an app is found to have a serious security vulnerability or contain malicious code, the system might mark it as forbidden. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
707 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
710 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
712 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
714 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
715 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
718 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
719 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
722 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
728 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
730 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
732 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
734 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
738 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
741 | The system must allow each app to store a last-used context that encodes its user-visible state during its most recent use. The last-used context must be treated as private data. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
744 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
749 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
752 | If we do, then they must be stored in a prescribed location/format to be understood by the GUI shell, whereas the rest of the last-used context does not have any particular requirement about the structure or even location of the last-used context. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
755 | Alternatively, this use-case could potentially be satisfied by having the GUI shell or compositor take a snapshot without the app's involvement. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
757 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
759 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
762 |
|
Comments: JK: OK. Additionally, if an app is based on the external data/context (e.g. internet radio), it could not restore the last-used context. PW: Good point, we should add that. | |
Extracted requirement: |
ID | Text |
---|---|
764 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
766 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
768 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
771 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
775 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
777 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
779 | Open question: do we expect this to be a boolean option (app should load LUC / app should not load LUC), or a tri-state (app should load LUC / app should not load LUC / app may decide)? |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
782 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
784 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
768 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
792 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
794 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
797 | The app framework must also be able to store its own last-used context, consisting of the visible (foreground) app programs, and optionally some or all of the app programs that were running and/or paused in the background. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
800 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
802 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
803 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
806 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
808 | Open question: is this something we want? If we do, we need either a requirement that the per-app LUC includes a snapshot of the window contents in a known location/format, or a requirement that the GUI shell or compositor can take the required snapshot. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
813 | Management of app-initiated downloads has been suggested as a topic that is potentially in the scope of the app framework. We feel that this should probably be considered to be an orthogonal topic, to be designed separately. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
816 | The platform should provide a HTTP download manager for use by apps. The download manager may also be used by platform components, but that is outside the scope of a standard interface. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
819 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
820 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
824 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
828 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
831 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
834 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
836 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
839 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
842 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
844 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
846 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
847 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
851 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
854 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
856 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
862 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
863 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
867 | Management of app bundle installation has been suggested as a topic that is potentially in the scope of the app framework. We feel that this should be considered to be an orthogonal topic, in the scope of the GENIVI Software Management design. Some requirements in this area are outlined here in the hope that they can be used to clarify the division of responsibilities. |
Comments: GN :OK | |
Extracted requirement: |
ID | Text |
---|---|
872 | App bundles are expected to be user-installable, and may be updated on a schedule not matching the underlying platform. |
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
874 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
875 |
|
Comments: GA: Optionally... I don't mind the capability being there, but not all systems will make this possible, presumably? PW: True, whether installing apps from removable media is allowed could be a vendor policy decision. Although if it’s not allowed, the system will most likely require an internet connection to install apps. | |
Extracted requirement: |
ID | Text |
---|---|
877 |
|
Comments: GN: OK | |
Extracted requirement: |
ID | Text |
---|---|
878 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
879 |
|
Comments: GN : Can this be vendor specific? In android upgrade can happen while app being run. PW: That would make things a lot more complex, in terms of guaranteeing that the upgrade happened atomically so that the old version of a running app could not accidentally load a file from the new version. As I understand it, Android does kill the application at some point during the upgrade process. In any case, the application has to be restarted at some point in order to use the upgraded binaries. | |
Extracted requirement: |
ID | Text |
---|---|
882 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
884 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
888 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
891 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
893 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
896 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
897 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
899 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
904 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
905 |
|
Comments: GA: Who suggests it and why? Let's discuss. I'm not sure this requirement is needed - isn't that controlled by the App Store and isn't it a (OEM) policy decision? PW: This is potentially an Apertis requirement, aimed at restricting the peak bandwidth a vehicle uses. It should probably be a vendor policy decision, yes. | |
Extracted requirement: |
ID | Text |
---|---|
908 | Is this a requirement? This seems like something that should be a quality-ofimplementation decision for implementations: an implementation that expects to run on comparatively fast hardware might wish to maximize user convenience by carrying out downloads and installations in parallel, while an implementation that optimizes for implementor convenience or comparatively slow hardware might prefer to impose a limit of one download or installation at a time. |
Comments: GA: Agree, see above. | |
Extracted requirement: |
ID | Text |
---|---|
914 | On a multi-user system, each user might wish to have a different set of apps installed. However, physically downloading and copying each app bundle for each user might be considered to be unacceptably inefficient. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
917 |
|
Comments: GA: I'd like to discuss this. It pertains to Software download strategy, OEM policy, and I think it could be controlled by AppStore just as well the embedded system? PW: It pertains to the software download strategy, and the way that user accounts are separated and where apps are installed — if apps are installed in any kind of system-wide prefix, then the converse of this requirement is hard to meet. GA: I'd be just as happy leaving out this requirement - it adds little understanding in my opinion. PW: OK. It's basically determined by whether the bundles are installed system-wide or not. | |
Extracted requirement: |
ID | Text |
---|---|
919 |
|
Comments: GA: Policy decision? But yes, agree the capability must be there. PW: This could be a policy decision — the choice here basically depends on whether the vendor has chosen for users to have strong privacy from other users. If they have weak privacy, it would make more sense for all installed apps to be listed in each user’s launcher. | |
Extracted requirement: |
ID | Text |
---|---|
922 |
|
Comments: GA: OK | |
Extracted requirement: |
ID | Text |
---|---|
925 |
|
Comments: GA: OK | |
Extracted requirement: |
ID | Text |
---|---|
926 |
|
Comments: GA: For me this is implicit from the previous "store (code) only once" requirement (if we keep that one) PW: We wanted to make the user-visible effects of another user ‘installing’ the app explicit. GA: I understand but I think at the high evel" of requirements we now have, whether apps are "unhidden" or installed anew is an implementation detail. GA: I could live without this text as a requirement. PW: OK. I think the important requirement overall in this section is that if user A installs an app, user B (or their apps) must not be able to detect the app has been installed until they decide to install it themselves. | |
Extracted requirement: |
ID | Text |
---|---|
930 |
|
Comments: GA: Hmm. Same name means same identity? Let's dig into this a bit... PW: ‘Same name’ means same identifier, yes. Identifiers for apps are meant to be globally unique; we have been using a reverse-DNS notation for this, for example ‘org.example.MyCalendarApp’. GA: Let's change name to "application identifier" or similar - and put whatever we choose into the definitions table. PW: OK GA: But I think it could be solved by simply stating that application identifiers are unique, whether this is possible to enforce or not, it ought to be the fundamental idea, right? The requirement here sounds like a description of a strategy to handle an exceptional event, i.e. in case we ever encounter two apps with identical identifier, but it does not seem to cover every error case anyway: "another user" - what if the same user is requesting the second installation? Etcetera. PW: This section exists in response to the iOS masque attack. I guess the basic requirement is that application identifiers are globally unique, across all installation origins. | |
Extracted requirement: |
ID | Text |
---|---|
932 |
|
Comments: GA: Agree but it should be simple to understand. Basically just guarantee all users have the same version. (follows from "store only once" idea). PW: I think the wording is this way round so that it’s not disallowed for users to be running different versions of the same app — some implementations might allow this, and might strive for it in order to implement strong privacy between users. Apertis does not allow this: users must run the same version of each app. | |
Extracted requirement: |
ID | Text |
---|---|
934 |
|
Comments: GA: Agree. Basically I a simple model is desired. Are users at all involved in which version of an app is being executed? PW: Do you mean in terms of being prompted about upgrades? I was assuming we would go with an Android-style model where the user is told which apps are going to be upgraded soon, and then the upgrade happens automatically unless the new version of an app requires the user to give it more permissions. That would require user intervention. However, as far as I am aware, no design work has happened on the user interaction for this yet. GA: This strategy I think is again OEM policy... So the possibility of doing this should be there, but it's not the only way. PW: Yes. This bullet point exists because it affects where and how apps are installed: whether the system needs to keep multiple versions of a single app around for different users. So the choice here significantly affects the application framework implementation, but shouldn't affect the design too much. | |
Extracted requirement: |
ID | Text |
---|---|
936 |
|
Comments: GA: Don't get it, please explain. AppStore/policy decision not affecting the device right? Or do you mean "store only once" requirement. PW: This is the ‘store only once requirement’ — installing apps per-device as opposed to per-(user, device). GA: OK, first of I would then rewrite "per-device" into something better. GA: Then I'm not sure. I waiver between thinking it is reasonable to assume every code is only stored once, vs. this being an implementation decision. If you have enough memory, and storing all applications inside a filesystem namespace that is unique to each user might still be a simple and effective option? Maybe even to the point of bundling all dependencies in app bundle... PW: I think this could indeed be an OEM decision. It significantly affects the implementation of an application framework, but shouldn't affect the design much. | |
Extracted requirement: |
ID | Text |
---|---|
938 | A vendor might wish to include app bundles in the original factory state of the system, while subsequently allowing them to be upgraded and uninstalled by the user, in the same way that Google apps are typically handled on Android devices. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
941 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
945 | App-store curators and app vendors might wish to provide publish apps on a time-limited basis. This is a complex topic and we recommend that it is considered separately. The Apertis Conditional Access design has some proposed requirements for this topic. |
Comments: GN : OK GA: I agree. Isn't this simply covered by some general mechanism in which OEMs can forcibly remove apps from the installation (security problem, time limited, or deprecated for any reason). Then it becomes OEM policy decision what to do with that possibility. Let's build in the requirements of keeping track of installation time and other such mechanisms (must be secure and not subvertible). PW: Agreed. For the Apertis conditional access design, we need: timestamp of installation or upgrade of a bundle; signature of bundle integrity from the app store; globally unique user, device, vehicle and bundle identifiers (note that there might be multiple Apertis devices in a single vehicle, and licensing could be separate for all of them); a way to work out when a trip ends in a vehicle (so it doesn't remove access to an app part-way through a trip). | |
Extracted requirement: |
ID | Text |
---|---|
951 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
956 | This appears to be taking an implementation detail (the manifest file) of the motivating requirements (framework must be able to []) and declaring it to be a requirement in its own right. We have attempted to re-state it in terms of requirements. |
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
960 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
961 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
963 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
965 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
966 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
968 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
970 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
972 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
975 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
976 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
977 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
979 |
|
Comments: GN : This being worked out. | |
Extracted requirement: |
ID | Text |
---|---|
987 | These state names demonstrate some confusion between states and state transitions. We have specifically documented states, not transitions, and provided details of the allowed transitions. |
Comments: GN : This being worked out | |
Extracted requirement: |
ID | Text |
---|---|
990 |
|
Comments: GN : This being worked out | |
Extracted requirement: |
ID | Text |
---|---|
996 |
|
Comments: GN : OK | |
Extracted requirement: |
ID | Text |
---|---|
998 |
|
Comments: GN : Agreed. This is discussed under access mechanism. | |
Extracted requirement: |
ID | Text |
---|---|
1000 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
1003 |
|
Comments: GN : This review comment is considered and updated the Requirement before the SAT approval for Miranda Compliance. | |
Extracted requirement: |
ID | Text |
---|---|
1011 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1013 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1015 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1017 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1019 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1021 | As written, this requirement states that this must be forbidden entirely. We have assumed that the intention was to forbid it with exceptions where necessary for the app to do its job. |
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1024 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1026 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1028 | This requirement wrongly conflates APIs with privilege boundaries. There is never any reason to deny access to APIs that do not cross a privilege boundary, because such APIs cannot do anything that the app could not do itself. |
Comments: GN : Agreed. | |
Extracted requirement: |
ID | Text |
---|---|
1032 |
|
Comments: GN : under discussion | |
Extracted requirement: |
ID | Text |
---|---|
1033 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1034 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1035 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1036 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1040 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1041 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1042 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1044 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1049 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1050 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
1053 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1054 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1055 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1056 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1058 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1060 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1067 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
1068 |
|
Comments: GN : Agreed | |
Extracted requirement: |
ID | Text |
---|---|
1074 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1075 |
|
Comments: GN : Not in the scope of Managed Apps handling. | |
Extracted requirement: |
ID | Text |
---|---|
1076 | GENIVI design, since the interaction between vendor-supplied native apps and the vendor-supplied platform is presumably up to the vendor. |
Comments: GN : We need to cover those areas which are coomon and can be generalized. | |
Extracted requirement: |
ID | Text |
---|---|
1078 | Terminology note: GENIVI's native applications are the same thing as Apertis' built-in applications. It is nothing to do with whether the app is written in native code compiled from C/C++. GENIVI applications that are not native applications are said to be managed applications, which are the same as Apertis' store applications. |
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
1083 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1084 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1085 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1088 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1089 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1091 |
|
Comments: | |
Extracted requirement: |
ID | Text |
---|---|
1093 | There has been some resistance to this requirement, and we have written the requirements in this document to say that vendors may impose this limit, but the framework should not. |
Comments: GN : Agreed. | |
Extracted requirement: |
ID | Text |
---|---|
1096 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1097 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1099 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |
ID | Text |
---|---|
1101 |
|
Comments: GN: OK, type : Req mapping | |
Extracted requirement: |