Hardware requirements of apps

Registered by Daniel Holbach

Some apps might require special hardware or just work on a big enough screen size. We want to figure out how to specify and support this in the software store.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
None
Direction:
Needs approval
Assignee:
None
Definition:
New
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

Notes:
 - apps should specify which screen resolution they need, etc. so not just "phone app" or "tablet app"
 - android spec might serve as example
 - solr schema needs to be updated
 - different from android: convergence idea (desktop mode? phone mode?)
 - Question: should this live in the click manifest?
   - yes, it could live there - needs to be spec'ed
   - store: inspecting on upload will take "a couple of months" to be fully up and running
 - Question: should "click install" fail/warn if hardware are not there?
 - Question: HW requirements vs. HW which would provide more app functionatlity
 - Differentiation: "produce content" vs "consume content"?

Some possible things to filter on:
 - Screen size
   - What units? Pixels, grid-units, points, lines-of-text, etc.?
 - Screen resolution?
 - Touch
   - Single versus multi?
 - GPS
 - Phone
 - Wifi/other network
 - RAM
 - Storage
 - Accelerometer
 - Barometer
 - Camera
   - Back versus front?
 - Mic
 - Speakers
 - FM radio receiver
 - Extra screen port (e.g. HDMI)
 - Physical keyboard ("that you might realistically type large volumes of text on")
 - Mouse
 - Number of cores, or speed
 - GPU (cores, speed, texture mem)
 - Bluetooth
 - CD/DVD reader/writer

Minimal set of requirements to get started
 - GPS
 - Multitouch
 - Minimum Screen Size
 - Maximum Screen Size
 - Telephony
 - Camera
 - Accelerometer
 - Network
 - Microphone
 - Bluetooth
 - Mouse

Need to be able to express things such as "one of the following: A, B, C". Perhaps disjunctive normal form would be sufficient: "A and B, or A and C, or A and D" (as opposed to general boolean logic, or conjuctive normal form "(A or B) and (C or D)").

NOTE: Some hardware is pluggable, or may not actually be /strictly/ required. It would be nice to able to install software despite what it claims to require, depending on what we allow apps to specify. Also, some hardware adds additional capabilities, for which software ought to work even in its absence.

Also, reviews could maybe cover for some of this. "This app sucks unless you have a keyboard!"

(?)

Work Items

Work items:
[beuno] Prioritize which items to filter on, for this first pass: TODO
[beuno] Create a hierarchy of capabilities: TODO
Define how to extend the list over time (example: how would an OEM add a new capability?): TODO
[ralsina] Talk to Platform API people to ask for code which returns hardware capabilities: TODO
[cjwatson] Investigate whether PackageKit can support interposing an "are you sure?" question for insufficient capabilities: TODO
[ralsina] Filter on the client side by capabilities: TODO
[beuno] Capture capabilities on the server side, push them to solr: TODO
[dholbach] talk to SDK people about having a "harware requirements edit form" in QtC somewhere: TODO
[dholbach] talk to dpm and mhal119 about docs for this: TODO
[dholbach] talk to dpm and mhal119 about good examples for hardware requirements (to get us started): TODO
[beuno] talk to support people about hardware requirements from software center apps: TODO

This blueprint contains Public information 
Everyone can see this information.