<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Mythi&amp;feed=atom&amp;limit=50&amp;target=Mythi&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Mythi&amp;feed=atom&amp;limit=50&amp;target=Mythi&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Mythi"/>
		<updated>2013-05-18T21:00:23Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/AgileBrowser</id>
		<title>AgileBrowser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/AgileBrowser"/>
				<updated>2011-06-28T10:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Add an example file /* Dependency file generation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:header.png]]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/images/AgileBrowser.zip Download AgileBrowser installer]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
AgileBrowser is a free architecture management tool. It abstracts and visualizes software models of MeeGo OS. The main focus is to provide easier access to up-to-date architecture information gathered from multiple sources. The models contain stuctural and dependendency information. There are several types of external attributes to be attached to the information.  Users of AgileBrowser can navigate, search, highlight with colors, share and export diagrams in various abstraction levels according to their individual needs.&lt;br /&gt;
&lt;br /&gt;
[[File:overview.png|center]]&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Installer package is available in this wiki: [[File:AgileBrowser.zip]]&lt;br /&gt;
&lt;br /&gt;
AgileBrowser can be run on Windows, Mac, Linux, etc., anywhere where Java is supported. The most important requirement is that the tool is memory expensive so it is recommended to have 1 GB RAM or fast swapping.&lt;br /&gt;
&lt;br /&gt;
== Dependency file generation ==&lt;br /&gt;
&lt;br /&gt;
To use AgileBrowser, a dependency metadata file is needed. For a quick start, download an example dependency file [[File:sf2011-deps.txt]].&lt;br /&gt;
&lt;br /&gt;
The following gives instructions to generate the dependency metadata file from scratch.&lt;br /&gt;
&lt;br /&gt;
# Checkout [[https://gitorious.org/meego-architecture/meego-deps-gen meego-deps-gen ]] project&lt;br /&gt;
# Get a package list (.packages) from any of the MeeGo images directory&lt;br /&gt;
#* Syntax &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;.&amp;lt;arch&amp;gt; &amp;lt;ver&amp;gt;-&amp;lt;rel&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get OSS and NON-OSS repodata primary XMLs for the same release&lt;br /&gt;
#* Download, unzip and rename as oss.xml and non-oss.xml&lt;br /&gt;
# Merge oss.xml and non-oss.xml into primary.xml&lt;br /&gt;
#* &amp;lt;code&amp;gt;sh merge-repodata.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate dependencies&lt;br /&gt;
#* &amp;lt;code&amp;gt;sh create-deps.sh &amp;lt;packagelistfilename&amp;gt;.packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User Guide = &lt;br /&gt;
&lt;br /&gt;
There are different guides available. Quick guide is for basic use cases of Agile Browser. In Quick Guide user is introduced to basic functionalities via simple example. Full User Guide contains all the functionalities of the tool.&lt;br /&gt;
&lt;br /&gt;
== Quick Guide ==&lt;br /&gt;
&lt;br /&gt;
It is time to take a closer look what AgileBrowser can do. This guide is a follow-up example, where user is introduced to AgileBrowser basic functions via a simple example.&lt;br /&gt;
&lt;br /&gt;
1. Open a model file. Here meego_handset_armv7hl_n900_devel_1_2_deps.txt model is used. Model can be opened from the Model Repository tree (bottom left corner) if models exists there or it can be opened from the locally using 'File' -&amp;gt; 'Open Model File'.&lt;br /&gt;
&lt;br /&gt;
[[File:firstview.png|center]]&lt;br /&gt;
&lt;br /&gt;
2. Then lets take a look what kind of kernel information model holds. Type 'kernel' into search field (text field located top of the screen) and hit enter. This searches the model looking for the elements that have 'kernel' in the name. In this case the result where given in the root level because we didn't gave any further details.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel1.png|center]]&lt;br /&gt;
&lt;br /&gt;
3. Now lets increase the Detail Level to get more detailed view about the 'kernel' search. Increase 'Detail Level' by 2 (Change 'Detail level 1' to 3 in Properties panel located in the top right corner). This action adds two more detail levels to graph. &lt;br /&gt;
&lt;br /&gt;
Browser now shows a good graph about Kernel in chosen model.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel2.png|center]]&lt;br /&gt;
&lt;br /&gt;
4. Lets now take a look at, that what elements/components are using these elements in the graph. So we are interested on what are the incoming dependencies. Select 'incoming' from the Dependencies combobox (located in the same Properties panel than the Detail level).&lt;br /&gt;
&lt;br /&gt;
It automatically draws all the incoming dependencies to kernel search elements.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel3.png|center]]&lt;br /&gt;
&lt;br /&gt;
Then lets take a look that what are the outgoing dependencies for the kernel search. (change 'incoming' to 'outgoing' in Dependencies combobox).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:kernel4.png|center]]&lt;br /&gt;
&lt;br /&gt;
5. Select an element from the graph to get more information about it (model has to contain attributes to get attribute information). If element has some attributes, those are shown in the Info panel (located in the bottom right corner). In this case we selected 'kernel-headers'. Attribute information shows that kernel-headers is under GPLv2 license.&lt;br /&gt;
&lt;br /&gt;
Now we are interested that what kind of licenses does the elements in the graph have. Lets change the coloring to be based on licensing information. Select 'Coloring' to be 'license under the 'Attribute Highlighting' (from the Properties panel again).&lt;br /&gt;
&lt;br /&gt;
This action colors all the elements that have license information. So same licenses are with the same color and so on. This is a good way to get a big picture about some attribute information, in this case about license.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel5.png|center]]&lt;br /&gt;
&lt;br /&gt;
From the graph it's now easy to see what kind of licenses elements have. LegendView shows the matching license based on coloring. Also it's possible to change color by clicking the color from the LegendView.&lt;br /&gt;
&lt;br /&gt;
6. Now if user wants to take a closer look at e.g. 'glibc' -element (this is in the graph), it is possible by double-clicking the element. This action shows the element with the same rules applied to it what we had done before. It shows the element with detail level 4 (this is because double-clicking drills down 1 level), it used automatically license coloring and it shows all the Outgoing dependencies.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel6.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Full User Guide ==&lt;br /&gt;
&lt;br /&gt;
[[/FullUserGuide|Full User Guide]]&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Search Related ==&lt;br /&gt;
&lt;br /&gt;
=== How to perform basic element search? ===&lt;br /&gt;
Basic search can be done by using Search Field located in the top of the application. By typing a string into Search Field it searches all the elements matching to string. Search rules can be modified (to what search string matches) from the 'Find Matches to...' which can be found from the Properties panel located in top right corner.&lt;br /&gt;
&lt;br /&gt;
If using &amp;quot;&amp;quot; in the beginning and in the end of the string, search only returns exact match of the string.&lt;br /&gt;
&lt;br /&gt;
=== How to perform search based on a attribute? (e.g. finding all the elements with GPLv2 license) ===&lt;br /&gt;
By typing @license=&amp;quot;GPLv2&amp;quot; into the search field, searches all the elements which are including the GPLv2 license. Of course, the license attribute has to be included in the model. Otherwise if not, it returns an empty graph.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;&amp;quot; marks are removed from the query (@license=GPLv2), search returns also the LGPLv2 licensed elements.&lt;br /&gt;
&lt;br /&gt;
=== Is it possible to combine search queries? ===&lt;br /&gt;
Yes. By using logical operations (AND, NOT, OR). For example, query string 'GUI OR Desktop' returns all the elements matching to GUI and also all the elements matching to Desktop. If using operator AND then result is given of both strings can be found from the element.&lt;br /&gt;
&lt;br /&gt;
=== How to search certain element filtering out some area from the scope? ===&lt;br /&gt;
This can be done by using operator NOT in the search string. Using search string 'kernel AND NOT &amp;quot;/System&amp;quot;' returns all the kernel named elements which are located somewhere else than under /System.&lt;br /&gt;
&lt;br /&gt;
=== Is it possible to search dependencies between elements? ===&lt;br /&gt;
Yes. Also dependency search is possible using Search Field. E.g. search string '&amp;quot;/System&amp;quot; --&amp;gt; &amp;quot;/User Interface&amp;quot;' returns all the dependencies which are from /System to /User Interface. If using just -- between the elements in the search string, search returns all the dependencies between those two elements (from /System to /User Interface and vice verse).&lt;br /&gt;
&lt;br /&gt;
=== How to perform dependency search between elements based on a dependency type? ===&lt;br /&gt;
Dependency attribute filtering must be inserted between the -- marks. If using same search string as above but with difference, that it returns just dependencies which are having type of package, the following string must be used: &amp;quot;/System&amp;quot; -package-&amp;gt; &amp;quot;/User Interface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Search query returned an empty graph. What should I do? Is Something wrong? ===&lt;br /&gt;
This is a normal behavior when nothing can be found from the model. This means that there is no results to return with given search string. &lt;br /&gt;
&lt;br /&gt;
First user should check typos from the Search Field, then user should check the Matching Criterias from the 'Find Matches to...' (can be found from the Properties panel). If everything looks ok, then model does not contain anything to return.&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
[[User:Villeez|Contact: Ville Laitila]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:Sf2011-deps.txt</id>
		<title>File:Sf2011-deps.txt</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:Sf2011-deps.txt"/>
				<updated>2011-06-28T10:51:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/AgileBrowser</id>
		<title>AgileBrowser</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/AgileBrowser"/>
				<updated>2011-06-28T10:48:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Add instructions to generate dependency files /* Getting Started */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:header.png]]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/images/AgileBrowser.zip Download AgileBrowser installer]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
AgileBrowser is a free architecture management tool. It abstracts and visualizes software models of MeeGo OS. The main focus is to provide easier access to up-to-date architecture information gathered from multiple sources. The models contain stuctural and dependendency information. There are several types of external attributes to be attached to the information.  Users of AgileBrowser can navigate, search, highlight with colors, share and export diagrams in various abstraction levels according to their individual needs.&lt;br /&gt;
&lt;br /&gt;
[[File:overview.png|center]]&lt;br /&gt;
&lt;br /&gt;
= Getting Started =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
Installer package is available in this wiki: [[File:AgileBrowser.zip]]&lt;br /&gt;
&lt;br /&gt;
AgileBrowser can be run on Windows, Mac, Linux, etc., anywhere where Java is supported. The most important requirement is that the tool is memory expensive so it is recommended to have 1 GB RAM or fast swapping.&lt;br /&gt;
&lt;br /&gt;
== Dependency file generation ==&lt;br /&gt;
&lt;br /&gt;
To use AgileBrowser, a dependency metadata file is needed. For a quick start, download an example dependency file here.&lt;br /&gt;
&lt;br /&gt;
The following gives instructions to generate the dependency metadata file from scratch.&lt;br /&gt;
&lt;br /&gt;
# Checkout [[https://gitorious.org/meego-architecture/meego-deps-gen meego-deps-gen ]] project&lt;br /&gt;
# Get a package list (.packages) from any of the MeeGo images directory&lt;br /&gt;
#* Syntax &amp;lt;code&amp;gt;&amp;lt;packagename&amp;gt;.&amp;lt;arch&amp;gt; &amp;lt;ver&amp;gt;-&amp;lt;rel&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get OSS and NON-OSS repodata primary XMLs for the same release&lt;br /&gt;
#* Download, unzip and rename as oss.xml and non-oss.xml&lt;br /&gt;
# Merge oss.xml and non-oss.xml into primary.xml&lt;br /&gt;
#* &amp;lt;code&amp;gt;sh merge-repodata.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate dependencies&lt;br /&gt;
#* &amp;lt;code&amp;gt;sh create-deps.sh &amp;lt;packagelistfilename&amp;gt;.packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User Guide = &lt;br /&gt;
&lt;br /&gt;
There are different guides available. Quick guide is for basic use cases of Agile Browser. In Quick Guide user is introduced to basic functionalities via simple example. Full User Guide contains all the functionalities of the tool.&lt;br /&gt;
&lt;br /&gt;
== Quick Guide ==&lt;br /&gt;
&lt;br /&gt;
It is time to take a closer look what AgileBrowser can do. This guide is a follow-up example, where user is introduced to AgileBrowser basic functions via a simple example.&lt;br /&gt;
&lt;br /&gt;
1. Open a model file. Here meego_handset_armv7hl_n900_devel_1_2_deps.txt model is used. Model can be opened from the Model Repository tree (bottom left corner) if models exists there or it can be opened from the locally using 'File' -&amp;gt; 'Open Model File'.&lt;br /&gt;
&lt;br /&gt;
[[File:firstview.png|center]]&lt;br /&gt;
&lt;br /&gt;
2. Then lets take a look what kind of kernel information model holds. Type 'kernel' into search field (text field located top of the screen) and hit enter. This searches the model looking for the elements that have 'kernel' in the name. In this case the result where given in the root level because we didn't gave any further details.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel1.png|center]]&lt;br /&gt;
&lt;br /&gt;
3. Now lets increase the Detail Level to get more detailed view about the 'kernel' search. Increase 'Detail Level' by 2 (Change 'Detail level 1' to 3 in Properties panel located in the top right corner). This action adds two more detail levels to graph. &lt;br /&gt;
&lt;br /&gt;
Browser now shows a good graph about Kernel in chosen model.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel2.png|center]]&lt;br /&gt;
&lt;br /&gt;
4. Lets now take a look at, that what elements/components are using these elements in the graph. So we are interested on what are the incoming dependencies. Select 'incoming' from the Dependencies combobox (located in the same Properties panel than the Detail level).&lt;br /&gt;
&lt;br /&gt;
It automatically draws all the incoming dependencies to kernel search elements.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel3.png|center]]&lt;br /&gt;
&lt;br /&gt;
Then lets take a look that what are the outgoing dependencies for the kernel search. (change 'incoming' to 'outgoing' in Dependencies combobox).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:kernel4.png|center]]&lt;br /&gt;
&lt;br /&gt;
5. Select an element from the graph to get more information about it (model has to contain attributes to get attribute information). If element has some attributes, those are shown in the Info panel (located in the bottom right corner). In this case we selected 'kernel-headers'. Attribute information shows that kernel-headers is under GPLv2 license.&lt;br /&gt;
&lt;br /&gt;
Now we are interested that what kind of licenses does the elements in the graph have. Lets change the coloring to be based on licensing information. Select 'Coloring' to be 'license under the 'Attribute Highlighting' (from the Properties panel again).&lt;br /&gt;
&lt;br /&gt;
This action colors all the elements that have license information. So same licenses are with the same color and so on. This is a good way to get a big picture about some attribute information, in this case about license.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel5.png|center]]&lt;br /&gt;
&lt;br /&gt;
From the graph it's now easy to see what kind of licenses elements have. LegendView shows the matching license based on coloring. Also it's possible to change color by clicking the color from the LegendView.&lt;br /&gt;
&lt;br /&gt;
6. Now if user wants to take a closer look at e.g. 'glibc' -element (this is in the graph), it is possible by double-clicking the element. This action shows the element with the same rules applied to it what we had done before. It shows the element with detail level 4 (this is because double-clicking drills down 1 level), it used automatically license coloring and it shows all the Outgoing dependencies.&lt;br /&gt;
&lt;br /&gt;
[[File:kernel6.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Full User Guide ==&lt;br /&gt;
&lt;br /&gt;
[[/FullUserGuide|Full User Guide]]&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Search Related ==&lt;br /&gt;
&lt;br /&gt;
=== How to perform basic element search? ===&lt;br /&gt;
Basic search can be done by using Search Field located in the top of the application. By typing a string into Search Field it searches all the elements matching to string. Search rules can be modified (to what search string matches) from the 'Find Matches to...' which can be found from the Properties panel located in top right corner.&lt;br /&gt;
&lt;br /&gt;
If using &amp;quot;&amp;quot; in the beginning and in the end of the string, search only returns exact match of the string.&lt;br /&gt;
&lt;br /&gt;
=== How to perform search based on a attribute? (e.g. finding all the elements with GPLv2 license) ===&lt;br /&gt;
By typing @license=&amp;quot;GPLv2&amp;quot; into the search field, searches all the elements which are including the GPLv2 license. Of course, the license attribute has to be included in the model. Otherwise if not, it returns an empty graph.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;&amp;quot; marks are removed from the query (@license=GPLv2), search returns also the LGPLv2 licensed elements.&lt;br /&gt;
&lt;br /&gt;
=== Is it possible to combine search queries? ===&lt;br /&gt;
Yes. By using logical operations (AND, NOT, OR). For example, query string 'GUI OR Desktop' returns all the elements matching to GUI and also all the elements matching to Desktop. If using operator AND then result is given of both strings can be found from the element.&lt;br /&gt;
&lt;br /&gt;
=== How to search certain element filtering out some area from the scope? ===&lt;br /&gt;
This can be done by using operator NOT in the search string. Using search string 'kernel AND NOT &amp;quot;/System&amp;quot;' returns all the kernel named elements which are located somewhere else than under /System.&lt;br /&gt;
&lt;br /&gt;
=== Is it possible to search dependencies between elements? ===&lt;br /&gt;
Yes. Also dependency search is possible using Search Field. E.g. search string '&amp;quot;/System&amp;quot; --&amp;gt; &amp;quot;/User Interface&amp;quot;' returns all the dependencies which are from /System to /User Interface. If using just -- between the elements in the search string, search returns all the dependencies between those two elements (from /System to /User Interface and vice verse).&lt;br /&gt;
&lt;br /&gt;
=== How to perform dependency search between elements based on a dependency type? ===&lt;br /&gt;
Dependency attribute filtering must be inserted between the -- marks. If using same search string as above but with difference, that it returns just dependencies which are having type of package, the following string must be used: &amp;quot;/System&amp;quot; -package-&amp;gt; &amp;quot;/User Interface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Search query returned an empty graph. What should I do? Is Something wrong? ===&lt;br /&gt;
This is a normal behavior when nothing can be found from the model. This means that there is no results to return with given search string. &lt;br /&gt;
&lt;br /&gt;
First user should check typos from the Search Field, then user should check the Matching Criterias from the 'Find Matches to...' (can be found from the Properties panel). If everything looks ok, then model does not contain anything to return.&lt;br /&gt;
&lt;br /&gt;
= Contacts =&lt;br /&gt;
[[User:Villeez|Contact: Ville Laitila]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture</id>
		<title>Architecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture"/>
				<updated>2011-06-17T12:59:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Upcoming Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Architecture ==&lt;br /&gt;
&lt;br /&gt;
MeeGo architecture team is responsible for defining and managing the MeeGo architecture. MeeGo architecture consists of Core OS layer and number of UX verticals on top the Core OS layer. The architecture team decides which component to use for the functionality needed in MeeGo with the objective of consistency inside the Core OS and to the applications that run above it.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/arjan Arjan van de Ven]''', Chief Architect, responsible for MeeGo architecture&lt;br /&gt;
* '''[http://meego.com/users/poussa Sakari Poussa]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
* '''[http://meego.com/users/mythi Mikko Ylinen]''', Handset UX Architect, responsible for Handset UX architecture&lt;br /&gt;
* '''[http://meego.com/users/sunilsaxena Sunil Saxena]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
*  [http://lists.meego.com/listinfo/meego-architecture MeeGo architecture mailing list]&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
* Architecture team meets once a week. Currently the meetings are not public.&lt;br /&gt;
* Agenda and minutes of the meetings will be posted to the meego-architecture mailing list&lt;br /&gt;
* Anyone can propose topics to the architecture team agenda&lt;br /&gt;
* Architecture topics can and should be discussed on meego-architecture mailing list&lt;br /&gt;
* Architecture team is responsible of making the decision in case consensus is not reached&lt;br /&gt;
&lt;br /&gt;
=== Process Improvement Topics ===&lt;br /&gt;
&lt;br /&gt;
* How to make the architecture meetings open. Not all the topics can be open but most can be. Examples of non-open parts includes topics which involves IPR, legal, patent, business, product or schedule sensitive material.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Developer Documentation: APIs, tutorials, videos, examples ([http://developer.meego.com]), to be published soon&lt;br /&gt;
* Architecture Documentation: High level architecture pictures and description ([http://meego.com/developers/meego-architecture])&lt;br /&gt;
* Developer and Subsystem Documentation: Detailed technical description of each MeeGo subsystem. Guidelines for developers working on MeeGo. ([[Architecture/Documentation]])&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* [[Architecture/Meetings]] - Meetings - agenda, minutes&lt;br /&gt;
&lt;br /&gt;
== Upcoming Features ==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
MeeGo Bugzilla lists the following features for MeeGo 1.2. The below proposal are all accepted and are on their way to MeeGo 1.2 release.&lt;br /&gt;
&lt;br /&gt;
* Display backlight and keyboard backlight control: [http://bugs.meego.com/show_bug.cgi?id=5525 5525], [http://bugs.meego.com/show_bug.cgi?id=5526 5526], [http://bugs.meego.com/show_bug.cgi?id=5527 5527], [http://bugs.meego.com/show_bug.cgi?id=5528 5528]&lt;br /&gt;
** Proposal 1: Maemo 6 MCE&lt;br /&gt;
*** ''MCE provides activity monitoring and notifications via D-Bus, controls display and backlight, ALS reading and display tuning, airplane mode''&lt;br /&gt;
&lt;br /&gt;
* Sharing: [http://bugs.meego.com/show_bug.cgi?id=8179 8179], [http://bugs.meego.com/show_bug.cgi?id=8180 8180], [http://bugs.meego.com/show_bug.cgi?id=8181 8181]&lt;br /&gt;
** Proposal 1: Maemo6 Sharing framework&lt;br /&gt;
*** ''Sharing framework provides a unified API for sharing files via, e.g., BT, email, web services. It includes webupload engine and an API for transfer UI''&lt;br /&gt;
&lt;br /&gt;
* Qt style APIs (that are not covered by Qt Mobility) for display backlight control, alarm/time, heartbeat, system state, thermal&lt;br /&gt;
** Proposal 1: Maemo6 QmSystem&lt;br /&gt;
*** ''QmSystem provides Qt style public APIs for various system services that are not covered by Qt Mobility''&lt;br /&gt;
&lt;br /&gt;
* Profiles: [http://bugs.meego.com/show_bug.cgi?id=5771 5771], [http://bugs.meego.com/show_bug.cgi?id=5750 5750], [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 profiled&lt;br /&gt;
*** ''profiled provides a daemon and libraries to access and control profiles related data in the device. The libprofile (C) and libprofile-qt (Qt) are interfaces for the profile client to connect to the server using D-Bus. The profiled data is stored in ‘ini’ files which can be customized per different releases.''&lt;br /&gt;
&lt;br /&gt;
* Ringtones+feedback: [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 NGF (non-graphic feedback)&lt;br /&gt;
*** ''The device has functionality to alert user of a call, alarms and notification (SMS, email, chat, system update) events. Events may or may not have a graphical part and it may have different behavior depending on the system state. Example of this is receiving an SMS message when there is no other activity and SMS message during a call. NGF provides a unified API for apps to request logical events. The actions (e.g,. play/show LED+audio+vibra) are combined in NGF and consistent look&amp;amp;feel is provided''.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* PIM Storage in Evolution Data Server (EDS) and email via Camel, SyncEvolution as sync engine&lt;br /&gt;
** architecture decision to move towards EDS and Camel [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html announced]&lt;br /&gt;
** planning [[/planning/evolution-data-server|in progress]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==   &lt;br /&gt;
&lt;br /&gt;
Architecture tools   &lt;br /&gt;
&lt;br /&gt;
*   [[AgileBrowser|Architecture navigation tool]]: able to browse meego packages and visually see the dependencies.&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture</id>
		<title>Architecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture"/>
				<updated>2011-06-17T12:57:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Architecture ==&lt;br /&gt;
&lt;br /&gt;
MeeGo architecture team is responsible for defining and managing the MeeGo architecture. MeeGo architecture consists of Core OS layer and number of UX verticals on top the Core OS layer. The architecture team decides which component to use for the functionality needed in MeeGo with the objective of consistency inside the Core OS and to the applications that run above it.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/arjan Arjan van de Ven]''', Chief Architect, responsible for MeeGo architecture&lt;br /&gt;
* '''[http://meego.com/users/poussa Sakari Poussa]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
* '''[http://meego.com/users/mythi Mikko Ylinen]''', Handset UX Architect, responsible for Handset UX architecture&lt;br /&gt;
* '''[http://meego.com/users/sunilsaxena Sunil Saxena]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
*  [http://lists.meego.com/listinfo/meego-architecture MeeGo architecture mailing list]&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
* Architecture team meets once a week. Currently the meetings are not public.&lt;br /&gt;
* Agenda and minutes of the meetings will be posted to the meego-architecture mailing list&lt;br /&gt;
* Anyone can propose topics to the architecture team agenda&lt;br /&gt;
* Architecture topics can and should be discussed on meego-architecture mailing list&lt;br /&gt;
* Architecture team is responsible of making the decision in case consensus is not reached&lt;br /&gt;
&lt;br /&gt;
=== Process Improvement Topics ===&lt;br /&gt;
&lt;br /&gt;
* How to make the architecture meetings open. Not all the topics can be open but most can be. Examples of non-open parts includes topics which involves IPR, legal, patent, business, product or schedule sensitive material.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Developer Documentation: APIs, tutorials, videos, examples ([http://developer.meego.com]), to be published soon&lt;br /&gt;
* Architecture Documentation: High level architecture pictures and description ([http://meego.com/developers/meego-architecture])&lt;br /&gt;
* Developer and Subsystem Documentation: Detailed technical description of each MeeGo subsystem. Guidelines for developers working on MeeGo. ([[Architecture/Documentation]])&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* [[Architecture/Meetings]] - Meetings - agenda, minutes&lt;br /&gt;
&lt;br /&gt;
== Upcoming Features ==&lt;br /&gt;
&lt;br /&gt;
MeeGo Bugzilla lists the following features for MeeGo 1.2. The below proposal are all accepted and are on their way to MeeGo 1.2 release.&lt;br /&gt;
&lt;br /&gt;
* Display backlight and keyboard backlight control: [http://bugs.meego.com/show_bug.cgi?id=5525 5525], [http://bugs.meego.com/show_bug.cgi?id=5526 5526], [http://bugs.meego.com/show_bug.cgi?id=5527 5527], [http://bugs.meego.com/show_bug.cgi?id=5528 5528]&lt;br /&gt;
** Proposal 1: Maemo 6 MCE&lt;br /&gt;
*** ''MCE provides activity monitoring and notifications via D-Bus, controls display and backlight, ALS reading and display tuning, airplane mode''&lt;br /&gt;
&lt;br /&gt;
* Sharing: [http://bugs.meego.com/show_bug.cgi?id=8179 8179], [http://bugs.meego.com/show_bug.cgi?id=8180 8180], [http://bugs.meego.com/show_bug.cgi?id=8181 8181]&lt;br /&gt;
** Proposal 1: Maemo6 Sharing framework&lt;br /&gt;
*** ''Sharing framework provides a unified API for sharing files via, e.g., BT, email, web services. It includes webupload engine and an API for transfer UI''&lt;br /&gt;
&lt;br /&gt;
* Qt style APIs (that are not covered by Qt Mobility) for display backlight control, alarm/time, heartbeat, system state, thermal&lt;br /&gt;
** Proposal 1: Maemo6 QmSystem&lt;br /&gt;
*** ''QmSystem provides Qt style public APIs for various system services that are not covered by Qt Mobility''&lt;br /&gt;
&lt;br /&gt;
* Profiles: [http://bugs.meego.com/show_bug.cgi?id=5771 5771], [http://bugs.meego.com/show_bug.cgi?id=5750 5750], [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 profiled&lt;br /&gt;
*** ''profiled provides a daemon and libraries to access and control profiles related data in the device. The libprofile (C) and libprofile-qt (Qt) are interfaces for the profile client to connect to the server using D-Bus. The profiled data is stored in ‘ini’ files which can be customized per different releases.''&lt;br /&gt;
&lt;br /&gt;
* Ringtones+feedback: [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 NGF (non-graphic feedback)&lt;br /&gt;
*** ''The device has functionality to alert user of a call, alarms and notification (SMS, email, chat, system update) events. Events may or may not have a graphical part and it may have different behavior depending on the system state. Example of this is receiving an SMS message when there is no other activity and SMS message during a call. NGF provides a unified API for apps to request logical events. The actions (e.g,. play/show LED+audio+vibra) are combined in NGF and consistent look&amp;amp;feel is provided''.&lt;br /&gt;
&lt;br /&gt;
* PIM Storage in Evolution Data Server (EDS) and email via Camel, SyncEvolution as sync engine&lt;br /&gt;
** architecture decision to move towards EDS and Camel [http://lists.meego.com/pipermail/meego-dev/2011-March/481890.html announced]&lt;br /&gt;
** planning [[/planning/evolution-data-server|in progress]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==   &lt;br /&gt;
&lt;br /&gt;
Architecture tools   &lt;br /&gt;
&lt;br /&gt;
*   [[AgileBrowser|Architecture navigation tool]]: able to browse meego packages and visually see the dependencies.&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Packaging/Guidelines</id>
		<title>Packaging/Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Packaging/Guidelines"/>
				<updated>2011-02-03T14:00:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Domain/Subsystem based RPM Groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Packaging Guidelines =&lt;br /&gt;
&lt;br /&gt;
Guidelines below were adapted for MeeGo from Moblin, OpenSUSE, Fedora and other distributions.&lt;br /&gt;
&lt;br /&gt;
== Maintaining a Package ==&lt;br /&gt;
Every package in MeeGo needs a maintainer (AKA owner, bug owner). Any package without an owner will automatically be nominated for deletion from MeeGo. A package maintainer is responsible for making sure that&lt;br /&gt;
* packages are up to date with latest upstream&lt;br /&gt;
* packages consistently build in the MeeGo build system and fix build failures when they occur&lt;br /&gt;
* package meta data in the RPM spec file is accurate&lt;br /&gt;
* the license of the package is correct&lt;br /&gt;
* she/he follow upstream for any critical security issues and fix them ASAP&lt;br /&gt;
* she/he Provides information about major changes to other packagers and maintainer to allow enough time for fixing compatibility issues&lt;br /&gt;
&lt;br /&gt;
Since the data about ownership of packages is not maintained anywhere right now we are starting to use available meta data fields in the build system to track ownership. This will be better integrated and managed at a later point, but to be able to start somewhere MeeGo will use the bugowner key available for every package. We will start adding the metadata about maintainers (bugowners) in the build system and we will have agrace period for this data to be supplied and added to the build system. After the grace period, packages without maintainer will be reviewed and any packages without a maintainer will be nominated for deletion.&lt;br /&gt;
&lt;br /&gt;
To add yourself as a bugowner of a package, please follow the steps below:&lt;br /&gt;
* Update to the most recent osc version (0.129) from the MeeGo tools repository (note: this is essential, since the needed options are not released upstream yet)&lt;br /&gt;
* Identify the packages  of which you are the ultimate maintainer&lt;br /&gt;
* Do the following for every package you maintain in the Trunk:* projects:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
osc reqms --role bugowner &amp;lt;project&amp;gt; &amp;lt;package&amp;gt; -m &amp;quot;I want to own this because I love this package&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your request will be sent and someone in release engineering will approve it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The current status can be seen here: [[Packaging/Maintainers]]&lt;br /&gt;
&lt;br /&gt;
== Package Naming ==&lt;br /&gt;
* Dash '-' must be used as the delimiter for name parts. &lt;br /&gt;
* Do NOT use an underscore '_', a plus '+', or a period '.' as a delimiter. &lt;br /&gt;
* The spec file should be named using the %{name}.spec scheme which should also correspond to the package name within a project in the build system.&lt;br /&gt;
&lt;br /&gt;
== Version and Release ==&lt;br /&gt;
&lt;br /&gt;
Package Versions look like : X.Y.Z-R.B&lt;br /&gt;
* X.Y.Z is the 'Version' number - determined by the source package.&lt;br /&gt;
* R is the 'Release' number which is automatically incremented by OBS whenever a source/packaging changes (eg a check-in or request acceptance)&lt;br /&gt;
* B is the build number which is incremented when the package is rebuilt due to a dependency change.&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The Version field in the spec file is where you should put the current version of the software being packaged. &lt;br /&gt;
There are four cases where the version contains non-numeric characters:&lt;br /&gt;
&lt;br /&gt;
* Pre-release packages: Packages released as &amp;quot;pre-release&amp;quot; versions, prior to a &amp;quot;final&amp;quot; version. Example tags include &amp;quot;alpha&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;rc&amp;quot;, &amp;quot;cvs&amp;quot;, &amp;quot;git&amp;quot;, &amp;quot;svn&amp;quot;, etc... Details can be found below: Non-Numeric Version.&lt;br /&gt;
* Post-release packages: Packages released after a &amp;quot;final&amp;quot; version. These packages contain the same numeric version as the &amp;quot;final&amp;quot; version, but have an additional non-numeric identifier. This mechanism may also be used for packaging only changes to an upstream package.&lt;br /&gt;
* Snapshot packages: Packages built from SCM snapshots. These packages could be either &amp;quot;pre&amp;quot; or &amp;quot;post&amp;quot; release packages. &lt;br /&gt;
&lt;br /&gt;
==== Non-Numeric Version ====&lt;br /&gt;
&lt;br /&gt;
We can use letters and tilde into the version tag. We do not use the Release field for this.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Let's assume the following Qt versions:&lt;br /&gt;
Qt 4.7.0~beta1&lt;br /&gt;
Qt 4.7.0~beta1+git1&lt;br /&gt;
Qt 4.7.0~beta2&lt;br /&gt;
Qt 4.7.0&lt;br /&gt;
&lt;br /&gt;
Version comparison results:&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1 4.7.0~beta1+git1&lt;br /&gt;
0:4.7.0~beta1+git1-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1+git2 4.7.0~beta2&lt;br /&gt;
0:4.7.0~beta2-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta2 4.7.0&lt;br /&gt;
0:4.7.0-None is newer&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
4.7.0~beta1 &amp;lt; 4.7.0~beta1+git1 &amp;lt; 4.7.0~beta2 &amp;lt; 4.7.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the ~ comparison order is specific to MeeGo rpm (http://rpm.org/ticket/56).&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
&lt;br /&gt;
This field is handled by the build system to be able to manage automated builds. The initial setting in the spec file is used by the build system but in many cases it does not need to be changed.&lt;br /&gt;
&lt;br /&gt;
There is no need for the %{dist} macro in the release field. This is also handled directly by the build system.&lt;br /&gt;
&lt;br /&gt;
The release number is set to zero with any version update. It is increased by one with any change in the package.&lt;br /&gt;
&lt;br /&gt;
We can put letters into the version tag, so we do not use the Release field for this. Details can be found above.&lt;br /&gt;
&lt;br /&gt;
If you build the package outside of the OBS or if you copy a package then you will of course not get the correct Release or Build values.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
*The ''Packager'' tag should not be used in spec files. The identities of the packagers are evident from the changelog entries. By not using the ''Packager'' tag, you also avoid seeing bad binaries rebuilt by someone else with your name in the header.  See also the '''Maximum RPM definition of the Packager tag''' at [http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-PACKAGER-TAG www.rpm.org] .  If you need to include information about the packager in the rpms ''you'' built, use &amp;lt;code&amp;gt;%packager&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;~/.rpmmacros&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
*The ''Vendor'' tag should not be used. It is set automatically by the build system.&lt;br /&gt;
&lt;br /&gt;
*Usually, the ''Pre&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Req'' tag should be replaced by plain ''Requires''.   For more info, see Maximum RPM snapshot's  [http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-manual-dependencies.html#S3-RPM-DEPEND-FINE-GRAINED fine grained dependencies chapter] .&lt;br /&gt;
* The ''Source'' tag documents where to find the upstream sources for the rpm.  In most cases this should be a complete URL to the upstream tarball.  &lt;br /&gt;
=== Summary Tag ===&lt;br /&gt;
The summary is a single line string describing the package. The maximum length is 80 characters. It should fit all standard situations and not assume any special context. It should be helpful alone, in alphabetically sorted or unsorted lists of some selected packages, and in alphabetically sorted or unsorted lists of all packages.&lt;br /&gt;
&lt;br /&gt;
It should describe the package's main function and point out any special properties of the package to support the user comparing similar packages. For example, the two words &amp;quot;Web Browser&amp;quot; summarize any web browser, but using additional adjectives (like minimalistic, complex, GNOME, KDE, text-based, fast, or author's) helps characterize a specific package.&lt;br /&gt;
&lt;br /&gt;
The RPM spec file contains only the English version to keep the RPM database small.&lt;br /&gt;
&lt;br /&gt;
*The ''Summary'' tag value should not end in a period. If this bothers you from a grammatical point of view, sit down, take a deep breath, and get over it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Group Tag ===&lt;br /&gt;
&lt;br /&gt;
Valid RPM Groups are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Amusements/Games&lt;br /&gt;
Amusements/Graphics&lt;br /&gt;
Applications/Archiving&lt;br /&gt;
Applications/Communications&lt;br /&gt;
Applications/Databases&lt;br /&gt;
Applications/Editors&lt;br /&gt;
Applications/Emulators&lt;br /&gt;
Applications/Engineering&lt;br /&gt;
Applications/File&lt;br /&gt;
Applications/Internet&lt;br /&gt;
Applications/Multimedia&lt;br /&gt;
Applications/Productivity&lt;br /&gt;
Applications/Publishing&lt;br /&gt;
Applications/System&lt;br /&gt;
Applications/Text&lt;br /&gt;
Development/Debuggers&lt;br /&gt;
Development/Languages&lt;br /&gt;
Development/Libraries&lt;br /&gt;
Development/System&lt;br /&gt;
Development/Tools&lt;br /&gt;
Documentation&lt;br /&gt;
System/Boot&lt;br /&gt;
System/Console&lt;br /&gt;
System/I18n/Chinese&lt;br /&gt;
System/I18n/Japanese&lt;br /&gt;
System/I18n/Korean&lt;br /&gt;
System/Packages&lt;br /&gt;
System/Base&lt;br /&gt;
System/Daemons&lt;br /&gt;
System/Kernel&lt;br /&gt;
System/Libraries&lt;br /&gt;
System/Shells&lt;br /&gt;
System/X11&lt;br /&gt;
System/X11/Fonts&lt;br /&gt;
System/X11/Icons&lt;br /&gt;
System/GUI/XFCE&lt;br /&gt;
System/GUI/Other&lt;br /&gt;
System/GUI/GNOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Domain/Subsystem based RPM Groups ====&lt;br /&gt;
&lt;br /&gt;
Following the new architecture and the new [http://meego.com/developers/meego-architecture/meego-architecture-domain-view domain view], RPM groups (The Group tag in the RPM) for core packages will be changed to match the domains and any package in the core that is part of one of the domain will have a corresponding group that matches the architecture.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Domain   &lt;br /&gt;
! Subsystem  &lt;br /&gt;
!Groupname&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Adaptation   ||  Communications/Cellular Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Framework   ||  Communications/Cellular Framework&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Telephony and IM   ||  Communications/Telephony and IM&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Bluetooth   ||  Communications/Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Connectivity Adaptation   ||  Communications/Connectivity Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  ConnMan   ||  Communications/ConnMan&lt;br /&gt;
|-&lt;br /&gt;
| Data Management   ||  Content Framework   ||  Data Management/Content Framework&lt;br /&gt;
|-&lt;br /&gt;
| Development Platform   ||  Platform SDK   ||  Development Platform/Platform SDK&lt;br /&gt;
|-&lt;br /&gt;
| Essentials   ||  Base Essentials   ||  Essentials/Base Essentials&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Font Management   ||  Graphics/Font Management&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Display and Graphics Adaptation   ||  Graphics/Display and Graphics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Input Adaptation   ||  Graphics/Input Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Open GL ES   ||  Graphics/Open GL ES&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  X11   ||  Graphics/X11&lt;br /&gt;
|-&lt;br /&gt;
| Kernel   ||  Linux Kernel   ||  Kernel/Linux Kernel&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Framework   ||  Location/Location Framework&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Adaptation   ||  Location/Location Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Audio Adaptation   ||  Multimedia/Audio Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Camera Adaptation   ||  Multimedia/Camera Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Gstreamer   ||  Multimedia/Gstreamer&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging and Video Adaptation   ||  Multimedia/Imaging and Video Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging Codecs   ||  Multimedia/Imaging Codecs&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  PulseAudio   ||  Multimedia/PulseAudio&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Sharing   ||  Multimedia/Sharing&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  UPnP   ||  Multimedia/UPnP&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Backup Framework   ||  Personal Information Management/Backup Framework&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Calendar Engine   ||  Personal Information Management/Calendar Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Contacts Engine   ||  Personal Information Management/Contacts Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Email Engine   ||  Personal Information Management/Email Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Synchronization Framework   ||  Personal Information Management/Synchronization Framework&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt   ||  Qt/Qt&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt Mobility   ||  Qt/Qt Mobility&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt WebKit   ||  Qt/Qt WebKit&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Accounts   ||  Security/Accounts&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Certificate Manager   ||  Security/Certificate Manager&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Integrity Protection Framework   ||  Security/Integrity Protection Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Access Control Framework   ||  Security/Access Control Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Single Sign-On   ||  Security/Single Sign-On&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  SW Distribution Security   ||  Security/SW Distribution Security&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Security Adaptation   ||  Security/Security Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Software Management   ||  Package Manager   ||  Software Management/Package Manager&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Context Framework   ||  System/Context Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  NGF   ||  System/NGF&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Resource Policy   ||  System/Resource Policy&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Adaptation   ||  System/Sensor Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Framework   ||  System/Sensor Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Startup Services   ||  System/Startup Services&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  System Control   ||  System/System Control&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Device Mode Adaptation   ||  System/Device Mode Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Vibra and Haptics Adaptation   ||  System/Vibra and Haptics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BuildRoot tag ===&lt;br /&gt;
The ''BuildRoot'' value MUST be below &amp;lt;code&amp;gt;%{_tmppath}/&amp;lt;/code&amp;gt; and MUST contain at least &amp;lt;code&amp;gt;%{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%{version}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_tmppath}/%{name}-%{version}-%{release}-root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BuildRoot tag can be omitted in packages targeting MeeGo only and is handled directly by rpm in MeeGo, for packages that need to run on other distros with older rpm it should be added for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
=== PreReq ===&lt;br /&gt;
&lt;br /&gt;
Packages should not use the PreReq tag. Once upon a time, in dependency loops PreReq used to &amp;quot;win&amp;quot; over the conventional Requires when RPM determined the installation order in a transaction. This is no longer the case.&lt;br /&gt;
&lt;br /&gt;
=== Explicit Requires ===&lt;br /&gt;
Packages must not contain explicit ''Requires'' on libraries except when absolutely &lt;br /&gt;
necessary. When explicit library ''Requires'' are necessary, there should be a spec file comment justifying it.&lt;br /&gt;
&lt;br /&gt;
We generally rely on rpmbuild to automatically add dependencies on library SONAMEs. &lt;br /&gt;
Modern package management tools are capable of resolving such dependencies to determine &lt;br /&gt;
the required packages. Explicit dependencies on specific package names may aid the &lt;br /&gt;
inexperienced user, who attempts at installing RPM packages manually, however, history &lt;br /&gt;
has shown that such dependencies add confusion when library/files are moved from one &lt;br /&gt;
package to another, when packages get renamed, when one out of multiple alternative &lt;br /&gt;
packages would suffice, and when versioned explicit dependencies become out-of-date and &lt;br /&gt;
inaccurate. Additionally, in some cases, old explicit dependencies on package names &lt;br /&gt;
require unnecessary updates/rebuilds. &lt;br /&gt;
&lt;br /&gt;
Exemplary rationale for a versioned explicit dependency:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # The automatic dependency on libfubar.so.1 is insufficient,&lt;br /&gt;
  # as we strictly need at least the release that fixes two segfaults.&lt;br /&gt;
  Requires: libfubar &amp;gt;= 0:1.2.3-7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packagers should revisit an explicit dependency as appropriate to avoid &lt;br /&gt;
it becoming inaccurate and superfluous.&lt;br /&gt;
&lt;br /&gt;
=== BuildRequires ===&lt;br /&gt;
&lt;br /&gt;
In package development and testing, please verify that your package is not missing any necessary build dependencies. Having proper build requirements saves the time of all developers and testers as well as build systems because they will not need to search for missing build requirements manually. It is also a safety feature that prevents builds with that would not otherwise fail, but would be missing crucial features. For example, a graphical application may exclude PNG support after its '''configure''' script detects that libpng is not installed.&lt;br /&gt;
&lt;br /&gt;
Before adding Build&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Requires to any package, please be comfortable with [[#Requires|  Requires]] .&lt;br /&gt;
&lt;br /&gt;
=== Patches ===&lt;br /&gt;
Each problem should be solved in a separate patch. To allow easy maintenance of patches, every patch should have a header providing the following information:&lt;br /&gt;
&lt;br /&gt;
* Authors' names&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines/signed-process Signed-off-by] tag&lt;br /&gt;
* Detailed description of the fixed problem&lt;br /&gt;
* URL of the original source of the patch if any&lt;br /&gt;
&lt;br /&gt;
The name of a patch file consists of:&lt;br /&gt;
&lt;br /&gt;
* The name and version of the source tarball from which the patched file is derived&lt;br /&gt;
* Some words that characterize the patch content&lt;br /&gt;
* The filename suffix &amp;lt;code class=&amp;quot;filename&amp;quot;&amp;gt;.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Patches are in the unified format (&amp;lt;span&amp;gt;'''diff -u'''&amp;lt;/span&amp;gt;) and should be applied with 1 strip level in the spec file (&amp;lt;span&amp;gt;'''%patch -p1'''&amp;lt;/span&amp;gt;). The only exceptions are the patches obtained from an another primary source site. The original name, suffix, and format is preserved in this case.&lt;br /&gt;
&lt;br /&gt;
Each patch should be compressed with &amp;lt;span&amp;gt;'''bzip2'''&amp;lt;/span&amp;gt; if its size is greater than 100kB. The macros &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%name&amp;lt;/code&amp;gt; and &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%version&amp;lt;/code&amp;gt; should be used whenever possible.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Source:   %{name}-%{version}.tar.bz2&lt;br /&gt;
 Patch0:   %{name}-%{version}-autoconf.patch&lt;br /&gt;
 Patch1:   %{name}-%{version}-gcc31.patch&lt;br /&gt;
&lt;br /&gt;
For the patches to be applied, the patches should be mentioned under %setup. For the above example, this could be done as&lt;br /&gt;
&lt;br /&gt;
 %setup -q&lt;br /&gt;
 %patch0 -p1&lt;br /&gt;
 %patch1 -p1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Patches have to be marked as such in the spec file and should be applied using the internal patch routines available in rpm. Use of alternate patch management system not supported by rpm is not allowed.&lt;br /&gt;
&lt;br /&gt;
=== %clean ===&lt;br /&gt;
&lt;br /&gt;
The %clean section is not required for MeeGo 1.1 and above. Each package for MeeGo 1.0 MUST have a %clean section, which contains rm -rf %{buildroot} (or $RPM_BUILD_ROOT).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Any relevant documentation included in the source distribution should be included in the package. Irrelevant documentation include build instructions, the omnipresent ''INSTALL'' file containing generic build instructions, for example, and documentation for non-Linux systems, e.g. ''README.MSDOS''.  Pay also attention about which subpackage you include documentation in, for example API documentation belongs in the -devel subpackage, not the main one.  Or if there's a lot of documentation, consider putting it into a subpackage.  In this case, it is recommended to use &amp;lt;code&amp;gt;*-doc&amp;lt;/code&amp;gt; as the subpackage name, and &amp;lt;code&amp;gt;Documentation&amp;lt;/code&amp;gt; as the value of the &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Also, if a package includes something as &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, it must not affect the runtime of the application. To summarize: If it is in &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, the program must run properly if it is not present.&lt;br /&gt;
&lt;br /&gt;
== Devel Packages ==&lt;br /&gt;
If the software being packaged contains files intended solely for development, those files should be put in a -devel subpackage. The following are examples of file types which should be in -devel:&lt;br /&gt;
* Header files (such as .h files)&lt;br /&gt;
* Unversioned shared libraries (such as libfoo.so). Versioned shared libraries (such as libfoo.so.3, libfoo.so.3.0.0) should not be in -devel.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is if the file is used for development and not needed for the base package to run properly, it should go in -devel.&lt;br /&gt;
&lt;br /&gt;
=== Requiring Base Package ===&lt;br /&gt;
Devel packages must require the base package using a fully versioned dependency: &amp;lt;code&amp;gt;Requires: %{name} = %{version}-%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Usually, subpackages other than -devel should also require the base package using a fully versioned dependency.&lt;br /&gt;
&lt;br /&gt;
=== Pkgconfig Files ===&lt;br /&gt;
The placement of pkgconfig(.pc) files depends on their usecase. Since they are almost always used for development purposes, they should be placed in a -devel package.&lt;br /&gt;
A reasonable exception is when the main package itself is a development tool not installed in a user runtime, such as gcc or gdb.&lt;br /&gt;
&lt;br /&gt;
== Test Packages ==&lt;br /&gt;
Tests should be included in -test subpackage or separate package according to the following guidelines.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Test_Packaging Test Packaging Guidelines]&lt;br /&gt;
&lt;br /&gt;
== Shared Libraries ==&lt;br /&gt;
Whenever possible (and feasible), MeeGo Packages containing libraries should build them as shared libraries. In addition, every binary RPM package which contains shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If the package has multiple subpackages with libraries, each subpackage should also have a &amp;lt;code&amp;gt;%post/%postun&amp;lt;/code&amp;gt; section that calls &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt;. An example of the correct syntax for this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post -p /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
%postun -p /sbin/ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this specific syntax only works if &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; is the only call in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If you have additional commands to run during the scriptlet, call &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; at the beginning of the scriptlet, like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --add&lt;br /&gt;
&lt;br /&gt;
%postun&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
Configuration files must be marked as such in packages.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, use &amp;lt;code&amp;gt;%config(noreplace)&amp;lt;/code&amp;gt; instead of plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; unless your best, educated guess is that doing so will break things.  In other words, think hard before overwriting local changes in configuration files on package upgrades.  An example case when /not/ to use &amp;lt;code&amp;gt;noreplace&amp;lt;/code&amp;gt; is when a package's configuration file changes so that the new package revision wouldn't work with the config file from the previous package revision.  Whenever plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; is used, add a brief comment to the specfile explaining why.&lt;br /&gt;
&lt;br /&gt;
Don't use %config or %config(noreplace) under /usr. /usr is deemed to not contain configuration files in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Initscripts ==&lt;br /&gt;
&lt;br /&gt;
Currently, only SystemV-style initscripts are supported in MeeGo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Desktop files ==&lt;br /&gt;
&lt;br /&gt;
If a package contains a GUI application, then it needs to also include a properly installed .desktop file.  For the purposes of these guidelines, a GUI application is defined as any application which draws an X window and runs from within that window.  Installed .desktop files MUST follow the [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec]  , paying particular attention to validating correct usage of Name, GenericName, [http://standards.freedesktop.org/menu-spec/latest/apa.html Categories]  ,&lt;br /&gt;
[http://www.freedesktop.org/Standards/startup-notification-spec StartupNotify]&lt;br /&gt;
entries.&lt;br /&gt;
&lt;br /&gt;
=== Icon tag in Desktop Files ===&lt;br /&gt;
The icon tag can be specified in two ways:&lt;br /&gt;
&lt;br /&gt;
* Full path to specific icon file:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=/usr/share/pixmaps/comical.png &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Short name without file extension:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=comical &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short name without file extension is preferred, because it allows for icon theming (it assumes .png by default, then tries .svg and finally .xpm), but either method is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== .desktop file creation ===&lt;br /&gt;
If the package doesn't already include and install its own .desktop file, you need to make your own. You can do this by including a .desktop file you create as a Source: (such as Source3: %{name}.desktop) or generating it in the spec file. Here are the contents of a sample .desktop file (comical.desktop): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Comical&lt;br /&gt;
GenericName=Comic Archive Reader&lt;br /&gt;
Comment=Open .cbr &amp;amp; .cbz files&lt;br /&gt;
Exec=comical&lt;br /&gt;
Icon=comical&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Graphics;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== desktop-file-install usage ===&lt;br /&gt;
It is not simply enough to just include the .desktop file in the package, one MUST run &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; OR &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;%install&amp;lt;/code&amp;gt; (and have &amp;lt;code&amp;gt;BuildRequires: desktop-file-utils&amp;lt;/code&amp;gt;), to help ensure .desktop file safety and spec-compliance. &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; MUST be used if the package does not install the file or there are changes desired to the .desktop file (such as add/removing categories, etc). &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; MAY be used instead if the .desktop file's content/location does not need modification.  Here are some examples of&lt;br /&gt;
usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \&lt;br /&gt;
%{SOURCE3}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--add-category=&amp;quot;AudioVideo&amp;quot;                             \&lt;br /&gt;
--delete-original                                       \&lt;br /&gt;
--dir=%{buildroot}%{_datadir}/applications              \&lt;br /&gt;
%{buildroot}/%{_datadir}/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-validate %{buildroot}/%{_datadir}/applications/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
=== Using %{buildroot} and %{optflags} vs $RPM_BUILD_ROOT and $RPM_OPT_FLAGS ===&lt;br /&gt;
There are two styles of defining the rpm Build Root and Optimization Flags in a spec file:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ||macro style ||  variable style&lt;br /&gt;
|-&lt;br /&gt;
|Build Root||%{buildroot}||$RPM_BUILD_ROOT&lt;br /&gt;
|-&lt;br /&gt;
|Opt. Flags||%{optflags}||$RPM_OPT_FLAGS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is very little value in choosing one style over the other, since they will resolve to the same values in all scenarios. You should pick a style and use it consistently throughout your packaging.&lt;br /&gt;
&lt;br /&gt;
Mixing the two styles, while valid, is bad from a QA and usability point of view, and should not be done in MeeGo packages.&lt;br /&gt;
&lt;br /&gt;
== Handling Locale Files ==&lt;br /&gt;
&lt;br /&gt;
If the package includes translations, add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BuildRequires: gettext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you don't, your package could fail to generate translation files in the buildroot.&lt;br /&gt;
&lt;br /&gt;
MeeGo includes an rpm macro called &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is usually:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In some cases, the application may use a different &amp;quot;name&amp;quot; for its locales. You may have to look at the locale files and see what they are named. If they are named &amp;lt;code&amp;gt;myapp.mo&amp;lt;/code&amp;gt;, then you will need to pass &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;%{name&amp;lt;/code&amp;gt;}.&lt;br /&gt;
After &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; macro. Usually, it will be named &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt;. You should then use this file in the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; list to include the locales detected by &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. To do this, you should include it with the -f parameter to &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are already using the -f parameter for the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; section where the locales should live, just append the contents of &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt; to the end of the file that you are already using with -f. (Note that only one file may be used with &amp;lt;code&amp;gt;%files -f&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Here is an example of proper usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;foo.spec&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure --with-cheese&lt;br /&gt;
make %{?_smp_mflags}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
make DESTDIR=%{buildroot} install&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&lt;br /&gt;
%clean&lt;br /&gt;
rm -rf %{buildroot}&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%doc LICENSE README&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why do we need to use %find_lang? ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; helps keep the spec file simple, and helps avoid several other packaging mistakes.&lt;br /&gt;
&lt;br /&gt;
* Packages that use &amp;lt;code&amp;gt;%{_datadir}/*&amp;lt;/code&amp;gt; to grab all the locale files in one line also grab ownership of the locale directories, which is not permitted.&lt;br /&gt;
* Most packages that have locales have lots of locales. Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is much easier in the spec file than having to do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_datadir}/locale/ar/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/be/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/cs/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/de/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/es/LC_MESSAGES/%{name}.mo&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* As new locale files appear in later package revisions, &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; will automatically include them when it is run, preventing you from having to update the spec any more than is necessary.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; in packages containing locales is a MUST.&lt;br /&gt;
&lt;br /&gt;
== Scriptlets ==&lt;br /&gt;
Great care should be taken when using scriptlets in MeeGo packages. If scriptlets are used, those scriptlets must be sane. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scriptlets requirements ===&lt;br /&gt;
Do not use the &amp;lt;code&amp;gt;Requires(pre,post)&amp;lt;/code&amp;gt; style notation for scriptlet dependencies, because of two bugs in RPM. Instead, they should be split like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Requires(pre): ...&lt;br /&gt;
Requires(post): ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information, see [http://www.redhat.com/archives/fedora-devel-list/2004-April/msg00674.html www.redhat.com] .&lt;br /&gt;
&lt;br /&gt;
=== Running scriptlets only in certain situations ===&lt;br /&gt;
When the rpm command executes the scriptlets in a package it indicates if the action preformed is an install, erase, upgrade or reinstall by passing an integer argument to the script in question according to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          install   erase   upgrade  reinstall&lt;br /&gt;
%pre         1        -         2         2&lt;br /&gt;
%post        1        -         2         2&lt;br /&gt;
%preun       -        0         1         -&lt;br /&gt;
%postun      -        0         1         -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that for example a package that installs an init script with the &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; command should uninstall it only on erase and not upgrade with the following snippet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%preun&lt;br /&gt;
if [ $1 -eq 0 ] ; then&lt;br /&gt;
/sbin/chkconfig --del %{name}&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also &amp;lt;code&amp;gt;/usr/share/doc/rpm-*/triggers&amp;lt;/code&amp;gt;, which gives a more formal, generalized definition about the integer value(s) passed to various scripts.&lt;br /&gt;
&lt;br /&gt;
=== Scriplets are only allowed to write in certain directories ===&lt;br /&gt;
Build scripts of packages (%prep, %build, %install, %check and %clean) may only alter files (create, modify, delete) under %{buildroot}, %{_builddir} and valid temporary locations like /tmp, /var/tmp (or $TMPDIR or %{_tmppath} as set by the rpmbuild process) according to the following matrix&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|         || /tmp, /var/tmp, $TMPDIR, %{_tmppath} || %{_builddir} || %{buildroot}&lt;br /&gt;
|-&lt;br /&gt;
|%prep    || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%build   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%install || yes                                  || yes          || yes&lt;br /&gt;
|-&lt;br /&gt;
|%check   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%clean   || yes                                  || yes          || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Further clarification: That should hold true irrespective of the builder's uid.&lt;br /&gt;
&lt;br /&gt;
== Use of Epochs ==&lt;br /&gt;
The Epoch tag in RPM is to be used only as a last resort, and should be avoided whenever possible. However, it is sometimes necessary to use an Epoch to handle upstream versioning changes or to ease transition from third party repositories. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a package from scratch ==&lt;br /&gt;
&lt;br /&gt;
See [[Spectacle]]&lt;br /&gt;
&lt;br /&gt;
Spectacle is a great tool for straightforward packages, and we have many of those, hundreds, many of those packages already have been using spectacle happily for a while now. Generally, the 80/20 rule applies here, almost 80% of packages in MeeGo can be converted to this format, probably around 20% will need to stay as is for various reasons.&lt;br /&gt;
&lt;br /&gt;
Spectacle in general helps  a lot when you have a package that does:&lt;br /&gt;
* configure&lt;br /&gt;
* make&lt;br /&gt;
* make install&lt;br /&gt;
&lt;br /&gt;
and especially useful when for example you have to manage many build dependencies and patches or for common packaging of perl/python/X packages that usually follows the same packaging work flow. We have plans to add lots of nice features to make packaging easier and more fun with spectacle.&lt;br /&gt;
&lt;br /&gt;
While spectacle has many advanced options to cover all kind of corner cases, it should not be used for complex packages that would require lots of customization, especially now that we support multiple architectures and where we need to apply code and custom scripts to support different scenarios.&lt;br /&gt;
&lt;br /&gt;
Spectacle provides scripts to convert spec files to spectacle, those try to do their best but you SHOULD never just take the output as is and rely on the script, a review of the output is necessary, otherwise you might end up with lots of duplication in the spec file. This is the most common mistake, developers are relying on the output of the conversion script, basically picking some spec file from another distro and converting it. This can lead to major disasters in some cases.&lt;br /&gt;
&lt;br /&gt;
So to summarize:&lt;br /&gt;
* It is NOT mandatory to use spectacle&lt;br /&gt;
* If you try to convert and find yourself spending more than a few minutes on a package, then probably there is something wrong and you should not be using that or you should RTFM.&lt;br /&gt;
* Use it with care, especially when you first import the data from existing spec files or when you first create your YAML file&lt;br /&gt;
* Your distro maintainer might send you a note that certain packages you are maintaining could be converted to spectacle easily, but she/he should not reject your package because it does not use spectacle.&lt;br /&gt;
* If you find yourself forced to edit the spec file manually for some reason, then either:&lt;br /&gt;
** your package is not suitable to be used with spectacle&lt;br /&gt;
** or you might want to ask for a feature to support that special case&lt;br /&gt;
&lt;br /&gt;
== Modifying existing Packages ==&lt;br /&gt;
&lt;br /&gt;
If you base a new package on an existing non-MeeGo package, make sure you verify its correctness of the package  and the spec file and to understand exactly what has been done to package the software exactly. Do not submit a package without knowing what those strange, but innocent-looking commands do.&lt;br /&gt;
&lt;br /&gt;
In particular, you should&lt;br /&gt;
&lt;br /&gt;
* ensure that original tarballs are self-contained pristine tarballs. The tarball should not contain symlinks that reference outside the tarball root directory&lt;br /&gt;
* verify any sources and patches and remove patches or sources that:&lt;br /&gt;
** are related to platforms we do not support (example: sparc, ia64, ppc, ...)&lt;br /&gt;
** Implement features we do not support (example: selinux)&lt;br /&gt;
** Read every patch and understand what it does, if it is needed, put an explanation in the header justifying why the patch is needed.&lt;br /&gt;
* verify that the license stated in the spec file matches the actual license of the software,&lt;br /&gt;
* skim the summary and description for typos and oddities (see Summary and description ),&lt;br /&gt;
* make sure that the correct build root is used,&lt;br /&gt;
* ensure that macro usage is consistent and that the macros are available in MeeGo (see Macros ). &lt;br /&gt;
&lt;br /&gt;
Keep old changelog entries to credit the original authors. Entries that are several years old or refer to ancient versions of the software may be erased. If you end up doing radical changes and re-write most of the spec file anyway, feel free to start the changelog from scratch. In other words, use your best judgement.&lt;br /&gt;
&lt;br /&gt;
== Changelogs ==&lt;br /&gt;
&lt;br /&gt;
This section describes the MeeGo policy for RPM changelogs. (Original changelogs included in the original source are not affected by this policy.) &lt;br /&gt;
&lt;br /&gt;
Please consider that a &amp;quot;normal end user with some technical skills&amp;quot; should be able to read and understand an RPM changelog. Changelog entries have to be in reverse chronological order: newer change log entries are listed above older entries, with the first entry being the most recent. &lt;br /&gt;
&lt;br /&gt;
Please bear in mind theat MeeGo changelogs will be automatically parsed to prepare distribution release notes and to report on bugs and CVEs and malformed entries may not be read correctly.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* MeeGo uses a separate file for package changes which is similar to a debian changelog file. This file is named as the spec file, but ends in *.changes instead of *.spec &lt;br /&gt;
* Entries in the changes file should have the following structure:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* dow mmm dd yyyy Name Goes Here &amp;lt;your@email.com&amp;gt; - [version]&lt;br /&gt;
- comment&lt;br /&gt;
- comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following exceptions are noted through observation:&lt;br /&gt;
* version is often omitted (such as: alsa-utils 1.0.15-1 -&amp;gt; 1.0.16-1)&lt;br /&gt;
* there are multiple changelog entries per version (such as: alsa-utils 1.0.19)&lt;br /&gt;
* the hyphen between email and version is often omitted (such as: alsa-utils)&lt;br /&gt;
* spaces between name and &amp;lt;email&amp;gt; are omitted (such as: Zhang, Qiang Z&amp;lt;qiang.z.zhang@intel.com&amp;gt; nano)&lt;br /&gt;
* name is sometimes omitted (such as: bitstream-vera-fonts nicolas.mailhot at laposte.net)&lt;br /&gt;
* &amp;lt;email&amp;gt; is sometimes omitted (such as: binutils Jim Kingdon)&lt;br /&gt;
This wide variation in formats makes automation tasks harder than they should be. Please use the correct format.&lt;br /&gt;
&lt;br /&gt;
=== External References ===&lt;br /&gt;
&lt;br /&gt;
Each external reference (bug numbers etc) should be of the form:&lt;br /&gt;
 &amp;quot;(&amp;quot; + external reference code + bug number +&amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently defined:&lt;br /&gt;
* MeeGo Bugs : BMC#&lt;br /&gt;
* MeeGo Features: FEA#&lt;br /&gt;
* Common Vulnerability / Exposure : CVE&lt;br /&gt;
&lt;br /&gt;
==== Bug Numbers in the change log ====&lt;br /&gt;
&lt;br /&gt;
During maintenance of a distribution, every change has to be marked with the correct bug number. Normally this has to be an number from https://bugzilla.meego.com/. Add an entry with bugzilla number and a short description of the bug-summary. For example:&lt;br /&gt;
 - Removed invalid desktop Category &amp;quot;Application&amp;quot; (BMC#4654).&lt;br /&gt;
 - Symlink icon to pixmaps dir (BMC#2108)&lt;br /&gt;
 - Added gnome-ui-properties to control-center (BMC#1960).&lt;br /&gt;
&lt;br /&gt;
New packages related to new features will refer to the corresponding bug number in bugzilla, preceded with an FEA.  For example:&lt;br /&gt;
 - Adding Qt Contacts support FEA#8011&lt;br /&gt;
&lt;br /&gt;
==== CVE numbers in change log ====&lt;br /&gt;
&lt;br /&gt;
As with bug numbers: Add a short description (normally the CVE summary should be enough), the Bugzilla and the CVE number to the changelog entry. Examples:&lt;br /&gt;
 - Add gdk-pixbuf-226710.patch (BMC#226710), and (CVE-2007-0010).&lt;br /&gt;
 - More XPM fixes: (CVE-2005-2975) xpm too many colors DoS (BMC#129642)&lt;br /&gt;
 - fix ~/.dmrc symlink attack (BMC#180704), (CVE-2006-2449)&lt;br /&gt;
&lt;br /&gt;
=== Spec File changes ===&lt;br /&gt;
Be as precise as possible! This is especially important if you remove something from the spec file. &lt;br /&gt;
&lt;br /&gt;
* Removing original source code must be declared in spec file with a comment (&amp;quot;useful for FreeBSD only&amp;quot; for example) - not necessary to repeat the comment in specfile.&lt;br /&gt;
* Extra commands (for example during %install) can be illustrated with a short comment in spec file&lt;br /&gt;
* Adding/Removing packages from Requires/Provides must be described in the changelog&lt;br /&gt;
&lt;br /&gt;
=== Source Code changes ===&lt;br /&gt;
&lt;br /&gt;
Document the most important changes but limit verbosity.&lt;br /&gt;
&lt;br /&gt;
* look into the source changelog and pick up the most important changes for the distribution (changes for other operation systems are not important). What has changed in the new version, usually in the level of detail of a NEWS file, the change log files are usually too long. More than '''10-15 lines''' shouldn't be necessary to describe the most important changes.&lt;br /&gt;
* arrange the original changes behind the version update information. Example:&lt;br /&gt;
  - Update to 1.3.2:&lt;br /&gt;
    + fixes memory leak in import function&lt;br /&gt;
    + new API command: unlock_client()&lt;br /&gt;
    + the following bugs are closed by this new upstream release:&lt;br /&gt;
    ++ ............ [MGN:332]&lt;br /&gt;
    ++ .............[MGN:337]&lt;br /&gt;
  - split of devel package&lt;br /&gt;
* If upstream does not provide a meaningful change log, then only do best effort. Don't waste too much time over it.&lt;br /&gt;
* If the upstream tarball really has not changed except for the version number, just the version number in the change log would be fine. Same goes for packages just containing some graphics or theming (unless upstream already provides something that fits). If the upstream changes just consists of &amp;quot;updated translation&amp;quot; or &amp;quot;several bug fixes&amp;quot; even that can be sufficient for a changelog entry (unless these bug fixes contain something you find worth mentioning).&lt;br /&gt;
&lt;br /&gt;
== Packaging Static Libraries ==&lt;br /&gt;
Packages including libraries should exclude static libs as far as possible (eg by configuring with ''--disable-static'').  Static libraries should only be included in exceptional circumstances.  Applications linking against libraries should as far as possible link against shared libraries not static versions.&lt;br /&gt;
&lt;br /&gt;
Libtool archives, ''foo.la'' files, should not be included. Packages using libtool will install these by default even if you configure with ''--disable-static'', so they may need to be removed before packaging.  Due to bugs in older versions of libtool or bugs in programs  that use it, there are times when it is not always possible to remove *.la files without modifying the program.  In most cases it is fairly easy to work with upstream to fix these issues.  Note that if you are updating a library in a stable release (not devel) and the package already contains *.la files, removing the *.la files should be treated as an API/ABI change -- ie: Removing them changes the interface that the library gives to the rest of the world and should not be undertaken lightly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packaging Static Libraries ===&lt;br /&gt;
* In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.&lt;br /&gt;
&lt;br /&gt;
* We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:&lt;br /&gt;
# '''Static libraries and shared libraries.''' In this case, the static libraries must be placed in a ''*-static'' subpackage. Separating the static libraries from the other development files in ''*-devel'' allow us to track this usage by checking which packages &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries.&lt;br /&gt;
# '''Static libraries only.''' When a package only provides static libraries you can place all the static library files in the ''*-devel'' subpackage.  When doing this you also must have a virtual Provide for the ''*-static'' package:&lt;br /&gt;
&amp;lt;pre&amp;gt;%package devel&lt;br /&gt;
Provides: foo-static = %{version}-%{release}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages which explicitly need to link against the static version must &amp;lt;code&amp;gt;BuildRequire: foo-static&amp;lt;/code&amp;gt;, so that the usage can be tracked.&lt;br /&gt;
&lt;br /&gt;
* If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the ''*-devel'' subpackage. The devel subpackage must have a virtual Provide for the ''*-static'' package, and packages dependent on it must &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Staticly Linking Executables ===&lt;br /&gt;
* Static linkage is a special exception and should be decided on a case-by-case basis.  The packager must provide rationale for linking statically, including precedences where available, to release engineering for approval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Packaging]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-21T14:43:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Package Management */  Remove details about package payload compressions. The first sentence already says format should follow MeeGo Reference Implementation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a MeeGo Profile layers on top of MeeGo Core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific MeeGo Profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the MeeGo Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the MeeGo Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo Reference Implementation and SHALL NOT replace or omit MeeGo Core or MeeGo Profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the MeeGo Reference Implementation. Modifications to the MeeGo Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated ''minor'' version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the MeeGo Reference Implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device, as long as the ABI remains compliant to MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of MeeGo Core packages consistent across all MeeGo compliant distributions.&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo Reference Implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 RPM build tool. The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-21T14:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* MeeGo Core Components */ Formatting changes only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a MeeGo Profile layers on top of MeeGo Core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific MeeGo Profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the MeeGo Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the MeeGo Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo Reference Implementation and SHALL NOT replace or omit MeeGo Core or MeeGo Profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the MeeGo Reference Implementation. Modifications to the MeeGo Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated ''minor'' version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the MeeGo Reference Implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device, as long as the ABI remains compliant to MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of MeeGo Core packages consistent across all MeeGo compliant distributions.&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo Reference Implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-21T14:18:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Platform Source Code Modification Policy */ Clarify compiler options sentence. Harmonize terms.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a MeeGo Profile layers on top of MeeGo Core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific MeeGo Profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the MeeGo Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the MeeGo Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo Reference Implementation and SHALL NOT replace or omit MeeGo Core or MeeGo Profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the MeeGo Reference Implementation. Modifications to the MeeGo Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated ''minor'' version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the MeeGo Reference Implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device, as long as the ABI remains compliant to MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of MeeGo Core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo Reference Implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:56:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Harmonize terms.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a MeeGo Profile layers on top of MeeGo Core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific MeeGo Profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the MeeGo Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the MeeGo Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the MeeGo Reference Implementation. Modifications to the MeeGo Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated ''minor'' version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of MeeGo Core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo Reference Implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Core Shared Libraries */ Add MeeGo in subsection title.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:31:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Requirements */ Fix spec. internal reference.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see [[#Definitions]]).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:21:09Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Use of APIs Provided by Platform */  Remove inconsistency.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:17:30Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Restructure subsections to improve readability. Better structure to separate application and platform compliance within the specification.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Compliance Principles ==&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== CPU Architectures ===&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
=== Profiles ===&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T12:01:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* System Implementation Compliance */  Harmonize terms. Platform Compliance is used in other places.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Platform Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T11:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Definitions */ Fix typesetting/copy-paste error.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to.&lt;br /&gt;
&lt;br /&gt;
'''MeeGo Reference Implementation''' – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T11:56:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* System Implementation Compliance */  Clarify alternative implementations to be additional/supplementary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative (''additional'' or ''supplementary'') implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T11:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Core Components */ Change subsection to MeeGo Core Components&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== MeeGo Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-14T11:46:26Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Package Management */ s/yum/RPM/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from RPM repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T16:22:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Forgot to make Core Components a subsection with == (was ===)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Core Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T16:21:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Move subsections under 'platform compliance' to improve readability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional System Components ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional components, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo Core components&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T16:13:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Move commands and utilities under 'platform compliance' (better place)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI (commands and utilities)&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified by the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T16:01:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Add MeeGo API a requirement for Platform implementations. Give no guarantee for Platform API.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories for Platform Compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== MeeGo API ===&lt;br /&gt;
&lt;br /&gt;
Implementations must support MeeGo API. The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
* OpenGL ES 2.0 [ [[#OGLES]] ]&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Use of APIs Provided by Platform ===&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. &lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with libraries provided by MeeGo API are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are not guaranteed compatibility. This is because there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, nor they work across all profiles.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T14:22:43Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Fix subsection mismatch against the .pdf version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
== API and ABI ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T13:47:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Introduction: make chapter a bit more high level intro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
=== API and ABI ===&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T13:36:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Dependencies: system components -&amp;gt; MeeGo Core components. Change MAY NOT to MUST NOT for dependencies to features outside this specification.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system, to enable binary application compatibility. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all MeeGo Core components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MUST NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies to MeeGo Core are allowed either in terms of package names or in terms of features, that are specified in Appendix A and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
=== API and ABI ===&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2011-01-10T12:54:08Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: References section: remove links which are not used in the document.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system, to enable binary application compatibility. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Qt47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QtMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all system components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MAY NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies on system components are allowed either in terms of package names or in terms of&lt;br /&gt;
features, that are specified in Appendix A (for MeeGo Core components) and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
=== API and ABI ===&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2010-12-23T12:09:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Remove WRT from the specification.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system, to enable binary application compatibility. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Gstreamer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* GStreamer 0.10 [http://apidocs.meego.com/platform/gstreamer‐0.10/ http://apidocs.meego.com/platform/gstreamer‐0.10/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;MTF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* MeeGo Touch Framework [http://apidocs.meego.com/mtf/ http://apidocs.meego.com/mtf/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Pulse&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* PulseAudio 0.9.21 [http://apidocs.meego.com/platform/pulseaudio‐0.9.21/ http://apidocs.meego.com/platform/pulseaudio‐0.9.21/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QT47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QTMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all system components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MAY NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies on system components are allowed either in terms of package names or in terms of&lt;br /&gt;
features, that are specified in Appendix A (for MeeGo Core components) and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
=== API and ABI ===&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification</id>
		<title>Quality/Compliance/MeeGo Compliance Specification</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/Compliance/MeeGo_Compliance_Specification"/>
				<updated>2010-12-23T12:05:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;MeeGo 1.1 Compliance Specification&lt;br /&gt;
&lt;br /&gt;
Draft Version 1.0.99.5 (Wiki page based on the .pdf version)&lt;br /&gt;
&lt;br /&gt;
This document is a preliminary draft and all content is subject to change. No product compliance decisions should be based on this draft.&lt;br /&gt;
&lt;br /&gt;
Copyright &amp;amp;copy; 2010 The Linux Foundation&lt;br /&gt;
&lt;br /&gt;
Linux is a registered trademark of Linus Torvalds.&lt;br /&gt;
MeeGo is a registered trademark of The Linux Foundation.&lt;br /&gt;
&lt;br /&gt;
* Other names and brands may be claimed as the property of others.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This specification defines the operating system interface and environment of the MeeGo operating system, to enable binary application compatibility. It is intended to be used by both application developers and system implementers, and to describe, for each audience, the requirements for MeeGo Compliance. A system implementation can be either a device running a MeeGo compliant software stack or a stand‐alone MeeGo compliant software stack.&lt;br /&gt;
&lt;br /&gt;
MeeGo is a registered trademark of the Linux Foundation, which controls the usage of the brand and trademark. One of the requirements for permission to use this trademark is compliance with the requirements in this specification.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This specification sets forth two separate component categories:&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core: a core set of operating system components (or &amp;lt;nowiki&amp;gt;''stack''&amp;lt;/nowiki&amp;gt;), as provided by the MeeGo project, is always required, and may not be replaced or repackaged (see Definitions).&lt;br /&gt;
&lt;br /&gt;
* MeeGo Profile: a targeted description for a device category, including additional components, device category programming interfaces, minimum hardware requirements, and more. Profile software components are subject to the same no‐replace rules as core components.&lt;br /&gt;
&lt;br /&gt;
These categories are additive: a profile layers on top of core to produce a complete description.&lt;br /&gt;
&lt;br /&gt;
System implementations may only claim compliance to a specific profile. It is possible for a profile to be empty, in other words, to state that the requirements for the profile are satisfied by MeeGo Core.&lt;br /&gt;
&lt;br /&gt;
Applications may comply either with a specific profile or, more generally, to MeeGo Core, to target multiple profiles.&lt;br /&gt;
&lt;br /&gt;
The specification also defines two levels of application compliance:&lt;br /&gt;
&lt;br /&gt;
* MeeGo API&lt;br /&gt;
* Platform API&lt;br /&gt;
&lt;br /&gt;
For more details, see Definitions, on page 4, and the Application Compatibility chapter, on page 10.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;EGL&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Native Platform Graphics Interface [http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf http://www.khronos.org/registry/egl/specs/eglspec.1.3.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;ELF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 [http://refspecs.linuxfoundation.org/elf/elf.pdf http://refspecs.linuxfoundation.org/elf/elf.pdf]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Gstreamer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* GStreamer 0.10 [http://apidocs.meego.com/platform/gstreamer‐0.10/ http://apidocs.meego.com/platform/gstreamer‐0.10/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;LSB40&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* ISO/IEC 23360:2005 Linux Standard 32 Base ‐ Part 1 Generic Specification [http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html http://refspecs.linuxfoundation.org/LSB_4.0.0/LSB‐Core‐generic/LSB‐Core‐generic.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;MTF&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* MeeGo Touch Framework [http://apidocs.meego.com/mtf/ http://apidocs.meego.com/mtf/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Notify&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Desktop Notifications Specification 0.9 [http://www.galago‐project.org/specs/notification/0.9 http://www.galago‐project.org/specs/notification/0.9]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;OGLES&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* OpenGL ES 2.X [http://www.khronos.org/opengles/2_X http://www.khronos.org/opengles/2_X]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Pulse&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* PulseAudio 0.9.21 [http://apidocs.meego.com/platform/pulseaudio‐0.9.21/ http://apidocs.meego.com/platform/pulseaudio‐0.9.21/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QT47&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Reference Documentation, version 4.7 [http://apidocs.meego.com/qt4.7/ http://apidocs.meego.com/qt4.7/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;QTMob&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* Qt Mobility Project APIS [http://apidocs.meego.com/qtmobility/ http://apidocs.meego.com/qtmobility/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;RFC2119&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels [http://www.ietf.org/rfc/rfc2119.txt http://www.ietf.org/rfc/rfc2119.txt]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;WGT&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
* W3C Widget Packaging and Configuration specification [http://www.w3.org/TR/widgets http://www.w3.org/TR/widgets]&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
The key words &amp;quot;MUST&amp;quot;, &amp;quot;MUST NOT&amp;quot;, &amp;quot;REQUIRED&amp;quot;, &amp;quot;SHALL&amp;quot;, &amp;quot;SHALL NOT&amp;quot;, &amp;quot;SHOULD&amp;quot;, &amp;quot;SHOULD NOT&amp;quot;, &amp;quot;RECOMMENDED&amp;quot;, &amp;quot;MAY&amp;quot;, and &amp;quot;OPTIONAL&amp;quot; used in this document are to be interpreted as described in [ [[#RFC2119]] ].&lt;br /&gt;
&lt;br /&gt;
'''MeeGo API''' – the preferred set of programming interfaces defined for MeeGo Core. The compatibility promise for these interfaces extends to an entire major version of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Platform API''' – the complete set of programming interfaces defined for MeeGo Core. The compatibility promise for those interfaces that are not part of the MeeGo API is limited to the current version ''(major.minor)'' of MeeGo.&lt;br /&gt;
&lt;br /&gt;
'''Repackaging''' – MeeGo Core packages may not be repackaged. This means the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; sections of the RPM spec file describing the package or subpackages may not be changed, only appended to. MeeGo Reference Implementation – the reference implementation shall be the source code released by the MeeGo project for the packages listed in Appendix A.&lt;br /&gt;
&lt;br /&gt;
'''Instruction set''' – includes both the set of used instructions in binaries, which may require the use of optional features in the CPU architecture, and also different compiler options to generate optimal instruction scheduling for a specific implementation of the CPU architecture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== System Implementation Compliance ===&lt;br /&gt;
&lt;br /&gt;
A compliant implementation is CPU architecture specific, and must provide a complete implementation, as required by the device category profile for that architecture. The implementation may provide additional components, as long as it does not replace or repackage the components required by the profile (see Definitions, on page 4).&lt;br /&gt;
&lt;br /&gt;
It is permissible for a system implementation to provide alternative implementations of system components, provided that the components required by the profile are present and fully functional. For example, an alternative media framework can be provided, as long as the MeeGo media framework is also present and fully functional (so that applications depending on the MeeGo media framework continue to work correctly).&lt;br /&gt;
&lt;br /&gt;
CPU architectures are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported architectures are:&lt;br /&gt;
&lt;br /&gt;
* Intel &amp;amp;reg; Atom &amp;amp;trade; (Core2/Atom instruction set (SSSE3))&lt;br /&gt;
* ARM v7 (ARM EABI, VFPv3 support, softfp float ABI)&lt;br /&gt;
&lt;br /&gt;
Profiles are approved by the MeeGo Technical Steering Group and may change over time. As of this version of the specification, supported profiles are:&lt;br /&gt;
&lt;br /&gt;
* Netbook&lt;br /&gt;
&lt;br /&gt;
==== Compliance Principles ====&lt;br /&gt;
&lt;br /&gt;
The fundamental purpose of this specification is to enable binary application compatibility on a particular architecture, while maintaining source compatibility across the entire MeeGo family. To that end, the following principles are in effect:&lt;br /&gt;
&lt;br /&gt;
* Where this specification is silent, ambiguous, or incomplete, regarding a particular behavior, it is the responsibility of the system implementer to ensure compatibility with the Reference Implementation. That is, notwithstanding any specific wording in this specification, the behavior is defined by the reference source code.&lt;br /&gt;
&lt;br /&gt;
* If a compliant binary application operates correctly on the Reference Implementation and fails on another implementation, it is the responsibility of the failing implementation to resolve the conflict.&lt;br /&gt;
&lt;br /&gt;
=== Application Compliance ===&lt;br /&gt;
&lt;br /&gt;
A conforming application shall satisfy the following requirements:&lt;br /&gt;
&lt;br /&gt;
* The application may be CPU architecture specific, and, if so, must follow all the requirements for that architecture.&lt;br /&gt;
&lt;br /&gt;
* The application’s executable files shall be either object files in the format defined for that CPU architecture, and/or scripts or intermediate code, written for one of the programming language interpreters described in this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall be assembled into a package of the supported form required by this specification.&lt;br /&gt;
&lt;br /&gt;
* The package shall identify the version of this specification the application conforms to, and shall identify the profile it requires, if any.&lt;br /&gt;
&lt;br /&gt;
* Any executable and non‐executable files, belonging to the application, shall be placed only in locations in the file system hierarchy allowed by this specification.&lt;br /&gt;
&lt;br /&gt;
* The application shall use only external commands and other facilities described in this specification, whether for installation tasks or run‐time tasks.&lt;br /&gt;
&lt;br /&gt;
=== Forward and Backward Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Compliant applications using only the MeeGo API set are assured compatibility with all future versions of MeeGo with the same major version number.&lt;br /&gt;
&lt;br /&gt;
Compliant applications which use the larger Platform API are assured compatibility only with the specific MeeGo version they were built for.&lt;br /&gt;
&lt;br /&gt;
There are no assurances that an application constructed for a particular version will run on any earlier version.&lt;br /&gt;
&lt;br /&gt;
= Platform Compatibility =&lt;br /&gt;
&lt;br /&gt;
Components of the MeeGo Core software stack, as well as additional software for profiles, are specified in terms of source code in the package form released by the MeeGo project. These packages are described by a name and version, and the set will correspond to a particular MeeGo version. For the purposes of this specification, this will be known as the ''MeeGo Reference Implementation''.&lt;br /&gt;
&lt;br /&gt;
== Platform Source Code Modification Policy ==&lt;br /&gt;
&lt;br /&gt;
System implementers MUST use the source code of the MeeGo 1.1 Reference Implementation and SHALL NOT replace or omit core or profile components. They SHALL NOT repackage the software such that individual files appear in different binary package names than those used in the Reference Implementation. Modifications to the Reference Implementation are subject to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Patches MAY be applied against source packages if necessary (for example, to fix bugs found in the field), but changes MUST NOT affect API, ABI, or behavior.&lt;br /&gt;
&lt;br /&gt;
* All patches SHALL be provided as patch files within corresponding SRPMs. It is recommended&lt;br /&gt;
that such patches be submitted back to the MeeGo project.&lt;br /&gt;
&lt;br /&gt;
* Patched packages SHALL have an updated minor version or suffix to distinguish them from the package released by the MeeGo Reference Implementation. The exact form of disambiguation is unspecified.&lt;br /&gt;
&lt;br /&gt;
* A MeeGo compliant distribution MUST use the same tool chain and the same compiler options as the reference implementation. A package MAY be compiled to use a specific instruction set, to optimize for the target device.&lt;br /&gt;
&lt;br /&gt;
== Additional System Packages ==&lt;br /&gt;
&lt;br /&gt;
A compliant system may provide additional packages, if they satisfy to the following requirements:&lt;br /&gt;
&lt;br /&gt;
* MUST NOT overwrite MeeGo packages&lt;br /&gt;
&lt;br /&gt;
* MUST NOT conflict with file system namespace of MeeGo ABI, utilities, and interpreted languages&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
=== System Package Manager ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall supply the RPM Package Manager (RPM), as provided by the MeeGo 1.1 reference implementation, and support installation of all compliant RPM packages, as created by the corresponding version 4.8 rpm build tool. In particular, it shall support packages with the following payload compressions:&lt;br /&gt;
&lt;br /&gt;
* gzip&lt;br /&gt;
* bzip2&lt;br /&gt;
* xz&lt;br /&gt;
* lzma&lt;br /&gt;
&lt;br /&gt;
The system shall support installation and updating of packages from yum repositories using PackageKit.&lt;br /&gt;
&lt;br /&gt;
=== Core Components ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core packages listed in Appendix A and marked as applicable for the given architecture. All packages shall be included in the default install. To ensure smooth installation of third party applications across all MeeGo compliant distributions, all the packages:&lt;br /&gt;
&lt;br /&gt;
* SHALL &amp;lt;nowiki&amp;gt;''provide''&amp;lt;/nowiki&amp;gt; (in RPM terminology) all features assigned to the corresponding package in appendix A&lt;br /&gt;
&lt;br /&gt;
* SHALL contain all files assigned to the corresponding package in Appendix A&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Note: The RPM package manager uses both techniques (feature‐based and file‐based) to resolve dependencies of packages to be installed, so it is important to keep these properties of core packages consistent across all MeeGo compliant distributions.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Executable and Linking Format ===&lt;br /&gt;
&lt;br /&gt;
MeeGo systems shall support execution of object files in Executable and Linking Format (ELF), as specified in [ [[#ELF]] ], LSB [ [[#LSB40]] ], and corresponding architecture‐specific supplements.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Linker ===&lt;br /&gt;
&lt;br /&gt;
The default system dynamic linker (&amp;lt;code&amp;gt;/lib/ld-linux.so.2&amp;lt;/code&amp;gt; for Atom and &amp;lt;code&amp;gt;/lib/ld-linux.so.3&amp;lt;/code&amp;gt; for ARM), when run in the default environment, shall load all shared libraries required for compliance from the paths provided by the MeeGo 1.1 Reference Implementation. That is, except in debug and other special cases, required libraries must not be overridden by alternative versions.&lt;br /&gt;
&lt;br /&gt;
=== Core Shared Libraries ===&lt;br /&gt;
&lt;br /&gt;
A compliant system shall provide all MeeGo Core shared libraries provided by the binary packages referenced in Appendix A, and each such library shall export all the public symbols assigned to the library, keeping run‐time semantics of those symbols the same as in the MeeGo 1.1 Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== Graphical Subsystem ==&lt;br /&gt;
&lt;br /&gt;
Implementations must support OpenGL ES 2.0 [ [[#OGLES]] ].&lt;br /&gt;
&lt;br /&gt;
If the capabilities above are provided by an X Window System server, the following extensions are required:&lt;br /&gt;
&lt;br /&gt;
* BIG‐REQUESTS, Composite, DAMAGE, DPMS, Generic 181 Event Extension, MIT‐SCREEN‐SAVER, MIT182&lt;br /&gt;
SHM, RANDR, RENDER, SYNC, XFIXES, XInputExtension, XKEYBOARD, XVideo&lt;br /&gt;
&lt;br /&gt;
If the driver stack is based on Mesa, additionally required are:&lt;br /&gt;
&lt;br /&gt;
* DRI2, GLX&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
A compliant system shall use Linux kernel version 2.6.35 or later.&lt;br /&gt;
Note: A minimum set of kernel configuration options may be required in a future version.&lt;br /&gt;
&lt;br /&gt;
= Application Compatibility =&lt;br /&gt;
&lt;br /&gt;
== Packaging Compliant Application Packages ==&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant applications SHALL be packaged in RPM package file format, with the exception of Web RunTime packages, which MAY use the native WGT format.&lt;br /&gt;
&lt;br /&gt;
=== Package Naming ===&lt;br /&gt;
&lt;br /&gt;
An application package name shall begin with one of the owners' fully qualified domain names in lower case, in reverse order, and end with the application name (such as, &amp;lt;code&amp;gt;com.ovi.appname&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Application packages SHALL “require” (in RPM terminology) all system components that are necessary for them to run. They MAY omit optional dependencies, if such omission does not affect ability of the application to operate in a user friendly way, that is, omitting a dependency should not have the effect of allowing the application to install successfully, but then not operate correctly.&lt;br /&gt;
&lt;br /&gt;
Application packages MAY NOT depend on features outside this specification as this would affect the ability of the application to install.&lt;br /&gt;
&lt;br /&gt;
Dependencies on system components are allowed either in terms of package names or in terms of&lt;br /&gt;
features, that are specified in Appendix A (for MeeGo Core components) and in the relevant profile chapter.&lt;br /&gt;
&lt;br /&gt;
=== Integration with RPM ===&lt;br /&gt;
&lt;br /&gt;
Application packages shall be created so that the package management system knows which files are installed. Queries on the installed packages, using standard package management tools, shall work as expected. Examples:&lt;br /&gt;
&lt;br /&gt;
* Find the package that a file belongs to:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –q –-file filename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* List all files installed by a package:&lt;br /&gt;
:: &amp;lt;code&amp;gt;$ rpm –ql packagename&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages that install all files in a post install script are not compliant.&lt;br /&gt;
&lt;br /&gt;
The application shall uninstall cleanly, leaving the system in the state it was in prior to installation (excepting any user‐added files or configurations).&lt;br /&gt;
&lt;br /&gt;
=== Layout in Filesystem ===&lt;br /&gt;
&lt;br /&gt;
An application shall be installed to &amp;lt;code&amp;gt;/opt/packagename/&amp;lt;/code&amp;gt; and, if necessary to the &amp;lt;code&amp;gt;/etc/opt/packagename/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/var/opt/packagename/&amp;lt;/code&amp;gt; directories. System wide configuration files shall be placed in the &amp;lt;code&amp;gt;/etc/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/etc&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. Variable data from a package, such as lock files, cached files, etc. shall be placed in the &amp;lt;code&amp;gt;/var/opt/packagename&amp;lt;/code&amp;gt; directory rather than directly in &amp;lt;code&amp;gt;/var&amp;lt;/code&amp;gt; , unless a specific location is necessary for the application or system to operate correctly. User specific files shall be stored in the &amp;lt;code&amp;gt;~/.config/packagename&amp;lt;/code&amp;gt; directory. The rationale for these rules is to avoid filename clashes between application packages and with system files, by defining portions of the filesystem certain to be unique to that application.&lt;br /&gt;
&lt;br /&gt;
=== Desktop Integration ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file shall be installed under &amp;lt;code&amp;gt;/usr/share/applications&amp;lt;/code&amp;gt;, and contain values for at least the following fields: Name, Comment, [Exec or Link], Icon, Type, and Categories.&lt;br /&gt;
&lt;br /&gt;
The picture file specified in the Icon field of the &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; file must be either SVG or PNG format. In the case of PNG format, the following sizes shall be provided: 16x16, 32x32, 64x64, and 128x128.&lt;br /&gt;
&lt;br /&gt;
=== API and ABI ===&lt;br /&gt;
&lt;br /&gt;
This section describes requirements aimed to ensure compatibility between executable files of third party applications and MeeGo compliant systems.&lt;br /&gt;
&lt;br /&gt;
=== Compliant Application Executables ===&lt;br /&gt;
&lt;br /&gt;
All MeeGo compliant binary executable files and shared libraries shall be in the ELF format, as described in section [[#Executable and Linking Format]]. They shall import external interfaces only from the following sources:&lt;br /&gt;
&lt;br /&gt;
* shared libraries supplied as a part of the application package&lt;br /&gt;
&lt;br /&gt;
* MeeGo Core shared libraries, if the interface is a part of the public interfaces of that library&lt;br /&gt;
&lt;br /&gt;
Additionally, the executable may use public interfaces from shared libraries specific to a MeeGo profile, but, in this case, the application will be compliant only with that profile.&lt;br /&gt;
If the executable is a plug‐in for a MeeGo system component, it may import interfaces from an executable of the system component, and from shared libraries loading as part of that executable.&lt;br /&gt;
&lt;br /&gt;
=== Use of Implementation-Dependent Instruction Sets ===&lt;br /&gt;
&lt;br /&gt;
An application binary or shared library MAY use CPU architecture extensions and implementation specific features when building the binaries. If such usage would limit the portability of the application, the application must clearly identify the restrictions imposed as a result – application repositories/stores must be able to filter out devices which are not applicable. The mechanism for this is unspecified.&lt;br /&gt;
&lt;br /&gt;
== Command and Utilities ==&lt;br /&gt;
&lt;br /&gt;
=== Default Shell Interpreter ===&lt;br /&gt;
&lt;br /&gt;
The default shell interpreter &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; of any compliant system shall be bash version 4.0.&lt;br /&gt;
&lt;br /&gt;
=== Commands and Utilities ===&lt;br /&gt;
&lt;br /&gt;
The default installation of any compliant system shall provide all of the commands and utilities specified in the package list of the MeeGo Reference Implementation.&lt;br /&gt;
&lt;br /&gt;
== MeeGo API Applications ==&lt;br /&gt;
&lt;br /&gt;
The MeeGo API consists of the following:&lt;br /&gt;
&lt;br /&gt;
* Qt 4.7 [ [[#Qt47]] ]&lt;br /&gt;
* Qt Mobility 1.0 [ [[#QtMob]] ]&lt;br /&gt;
&lt;br /&gt;
Applications which link exclusively with these libraries are compliant for the major version of MeeGo they were built for. They are not necessarily compliant to earlier minor versions than the one they were built for. Applications should target the lowest applicable ''{major.minor}'' version of MeeGo for the widest portability.&lt;br /&gt;
&lt;br /&gt;
== Platform API Applications ==&lt;br /&gt;
&lt;br /&gt;
The Platform API consists of public interfaces from all libraries provided by MeeGo Core (see Appendix A).&lt;br /&gt;
&lt;br /&gt;
Applications using the larger Platform API are only guaranteed compatibility with the version of MeeGo for which they were built. That is, there is no explicit guarantee that interfaces outside the MeeGo API will remain consistent, or indeed will remain available, across releases.&lt;br /&gt;
&lt;br /&gt;
The MeeGo API is strongly preferred for applications. The Platform API may be used when needed, but, in general, is recommended only when the MeeGo API is insufficient. Currently, some useful multimedia features are not supported by Qt or Qt Mobility. In addition, OpenGL‐based applications that are not using Qt will link directly with these libraries.&lt;br /&gt;
&lt;br /&gt;
== Web Run Time (WRT) Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Runtime Environment ===&lt;br /&gt;
&lt;br /&gt;
MeeGo 1.1 includes support for executing Web Runtime 1.2 [ [[#WGT]] ] applications. These are applications developed using standard web technologies, such as HTML, Javascript, and CSS. They are similar to web widgets or applets, except that they are run as full‐screen, stand‐alone applications on top of a Webkit based runtime engine.&lt;br /&gt;
&lt;br /&gt;
Web RunTime is currently a technology preview and should be considered similar to the Platform API in that the compatibility guarantees are limited to the current MeeGo version.&lt;br /&gt;
&lt;br /&gt;
=== Packaging and Installation ===&lt;br /&gt;
Web Runtime applications are bundled as wgt packages (see [ [[#WGT]] ]). These are installed on the target system using a tool called &amp;lt;code&amp;gt;widgetinstaller&amp;lt;/code&amp;gt;, which is part of the &amp;lt;code&amp;gt;qt-web-runtime&amp;lt;/code&amp;gt; package and available on all MeeGo‐compliant distributions. Web Runtime applications (&amp;lt;code&amp;gt;wgt&amp;lt;/code&amp;gt; files) MAY be packaged as RPMs for distribution purposes: application stores are likely to require this packaging format, and such files can be included in standard yum/zipper repositories. The RPM provides a simple wrapper that calls the &amp;lt;code&amp;gt;widgetinstaller&amp;lt;/code&amp;gt; program with the &amp;lt;code&amp;gt;wgt&amp;lt;/code&amp;gt; file. Note that this is an exception to the rule in section [[#Integration with RPM]], which states that applications may not use a postinstall script to install files.&lt;br /&gt;
&lt;br /&gt;
= MeeGo Netbook Profile Specification =&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
The following hardware capabilities are recommended but not required:&lt;br /&gt;
&lt;br /&gt;
* Network connectivity provided by one or more of the following: WiFi / Ethernet / 3G data / WiMAX&lt;br /&gt;
&lt;br /&gt;
* A physical keyboard and pointing device&lt;br /&gt;
&lt;br /&gt;
* A minimum screen resolution of 1024x600 pixels&lt;br /&gt;
&lt;br /&gt;
* A minimum of 1024 MB of RAM&lt;br /&gt;
&lt;br /&gt;
== Package Management ==&lt;br /&gt;
&lt;br /&gt;
There are no additional package management requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== ABI and API ==&lt;br /&gt;
&lt;br /&gt;
There are no additional ABI and API requirements beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Other Requirements ==&lt;br /&gt;
&lt;br /&gt;
A compliant Netbook implementation must provide the following functionality&lt;br /&gt;
&lt;br /&gt;
*  a window manager that supports running MeeGo compliant applications&lt;br /&gt;
&lt;br /&gt;
*  a notification system using &amp;lt;code&amp;gt;libnotify&amp;lt;/code&amp;gt; or compliant with the Desktop Notifications Specification 0.9 defined in [ [[#Notify]] ]&lt;br /&gt;
&lt;br /&gt;
* the ability to launch MeeGo‐compliant applications&lt;br /&gt;
&lt;br /&gt;
* a network configuration UI supporting ConnMan&lt;br /&gt;
&lt;br /&gt;
== Netbook Profile Packages ==&lt;br /&gt;
&lt;br /&gt;
There are no additional packages required beyond those specified for MeeGo Core compliance.&lt;br /&gt;
&lt;br /&gt;
== Appendix A – MeeGo Core Packages ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(not copied)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Packaging/Guidelines</id>
		<title>Packaging/Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Packaging/Guidelines"/>
				<updated>2010-12-21T09:44:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Domain/Subsystem based RPM Groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Packaging Guidelines =&lt;br /&gt;
&lt;br /&gt;
Guidelines below were adapted for MeeGo from Moblin, OpenSUSE, Fedora and other distributions.&lt;br /&gt;
&lt;br /&gt;
== Maintaining a Package ==&lt;br /&gt;
Every package in MeeGo needs a maintainer (AKA owner, bug owner). Any package without an owner will automatically be nominated for deletion from MeeGo. A package maintainer is responsible for making sure that&lt;br /&gt;
* packages are up to date with latest upstream&lt;br /&gt;
* packages consistently build in the MeeGo build system and fix build failures when they occur&lt;br /&gt;
* package meta data in the RPM spec file is accurate&lt;br /&gt;
* the license of the package is correct&lt;br /&gt;
* she/he follow upstream for any critical security issues and fix them ASAP&lt;br /&gt;
* she/he Provides information about major changes to other packagers and maintainer to allow enough time for fixing compatibility issues&lt;br /&gt;
&lt;br /&gt;
Since the data about ownership of packages is not maintained anywhere right now we are starting to use available meta data fields in the build system to track ownership. This will be better integrated and managed at a later point, but to be able to start somewhere MeeGo will use the bugowner key available for every package. We will start adding the metadata about maintainers (bugowners) in the build system and we will have agrace period for this data to be supplied and added to the build system. After the grace period, packages without maintainer will be reviewed and any packages without a maintainer will be nominated for deletion.&lt;br /&gt;
&lt;br /&gt;
To add yourself as a bugowner of a package, please follow the steps below:&lt;br /&gt;
* Update to the most recent osc version (0.129) from the MeeGo tools repository (note: this is essential, since the needed options are not released upstream yet)&lt;br /&gt;
* Identify the packages  of which you are the ultimate maintainer&lt;br /&gt;
* Do the following for every package you maintain in the Trunk:* projects:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
osc reqms --role bugowner &amp;lt;project&amp;gt; &amp;lt;package&amp;gt; -m &amp;quot;I want to own this because I love this package&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your request will be sent and someone in release engineering will approve it&lt;br /&gt;
&lt;br /&gt;
== Package Naming ==&lt;br /&gt;
* Dash '-' must be used as the delimiter for name parts. &lt;br /&gt;
* Do NOT use an underscore '_', a plus '+', or a period '.' as a delimiter. &lt;br /&gt;
* The spec file should be named using the %{name}.spec scheme which should also correspond to the package name within a project in the build system.&lt;br /&gt;
&lt;br /&gt;
== Version and Release ==&lt;br /&gt;
&lt;br /&gt;
Package Versions look like : X.Y.Z-R.B&lt;br /&gt;
* X.Y.Z is the 'Version' number - determined by the source package.&lt;br /&gt;
* R is the 'Release' number which is automatically incremented by OBS whenever a source/packaging changes (eg a check-in or request acceptance)&lt;br /&gt;
* B is the build number which is incremented when the package is rebuilt due to a dependency change.&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The Version field in the spec file is where you should put the current version of the software being packaged. &lt;br /&gt;
There are four cases where the version contains non-numeric characters:&lt;br /&gt;
&lt;br /&gt;
* Pre-release packages: Packages released as &amp;quot;pre-release&amp;quot; versions, prior to a &amp;quot;final&amp;quot; version. Example tags include &amp;quot;alpha&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;rc&amp;quot;, &amp;quot;cvs&amp;quot;, &amp;quot;git&amp;quot;, &amp;quot;svn&amp;quot;, etc... Details can be found below: Non-Numeric Version.&lt;br /&gt;
* Post-release packages: Packages released after a &amp;quot;final&amp;quot; version. These packages contain the same numeric version as the &amp;quot;final&amp;quot; version, but have an additional non-numeric identifier. This mechanism may also be used for packaging only changes to an upstream package.&lt;br /&gt;
* Snapshot packages: Packages built from SCM snapshots. These packages could be either &amp;quot;pre&amp;quot; or &amp;quot;post&amp;quot; release packages. &lt;br /&gt;
&lt;br /&gt;
==== Non-Numeric Version ====&lt;br /&gt;
&lt;br /&gt;
We can use letters and tilde into the version tag. We do not use the Release field for this.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Let's assume the following Qt versions:&lt;br /&gt;
Qt 4.7.0~beta1&lt;br /&gt;
Qt 4.7.0~beta1+git1&lt;br /&gt;
Qt 4.7.0~beta2&lt;br /&gt;
Qt 4.7.0&lt;br /&gt;
&lt;br /&gt;
Version comparison results:&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1 4.7.0~beta1+git1&lt;br /&gt;
0:4.7.0~beta1+git1-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1+git2 4.7.0~beta2&lt;br /&gt;
0:4.7.0~beta2-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta2 4.7.0&lt;br /&gt;
0:4.7.0-None is newer&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
4.7.0~beta1 &amp;lt; 4.7.0~beta1+git1 &amp;lt; 4.7.0~beta2 &amp;lt; 4.7.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the ~ comparison order is specific to MeeGo rpm (http://rpm.org/ticket/56).&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
&lt;br /&gt;
This field is handled by the build system to be able to manage automated builds. The initial setting in the spec file is used by the build system but in many cases it does not need to be changed.&lt;br /&gt;
&lt;br /&gt;
There is no need for the %{dist} macro in the release field. This is also handled directly by the build system.&lt;br /&gt;
&lt;br /&gt;
The release number is set to zero with any version update. It is increased by one with any change in the package.&lt;br /&gt;
&lt;br /&gt;
We can put letters into the version tag, so we do not use the Release field for this. Details can be found above.&lt;br /&gt;
&lt;br /&gt;
If you build the package outside of the OBS or if you copy a package then you will of course not get the correct Release or Build values.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
*The ''Packager'' tag should not be used in spec files. The identities of the packagers are evident from the changelog entries. By not using the ''Packager'' tag, you also avoid seeing bad binaries rebuilt by someone else with your name in the header.  See also the '''Maximum RPM definition of the Packager tag''' at [http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-PACKAGER-TAG www.rpm.org] .  If you need to include information about the packager in the rpms ''you'' built, use &amp;lt;code&amp;gt;%packager&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;~/.rpmmacros&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
*The ''Vendor'' tag should not be used. It is set automatically by the build system.&lt;br /&gt;
&lt;br /&gt;
*Usually, the ''Pre&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Req'' tag should be replaced by plain ''Requires''.   For more info, see Maximum RPM snapshot's  [http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-manual-dependencies.html#S3-RPM-DEPEND-FINE-GRAINED fine grained dependencies chapter] .&lt;br /&gt;
* The ''Source'' tag documents where to find the upstream sources for the rpm.  In most cases this should be a complete URL to the upstream tarball.  &lt;br /&gt;
=== Summary Tag ===&lt;br /&gt;
The summary is a single line string describing the package. The maximum length is 80 characters. It should fit all standard situations and not assume any special context. It should be helpful alone, in alphabetically sorted or unsorted lists of some selected packages, and in alphabetically sorted or unsorted lists of all packages.&lt;br /&gt;
&lt;br /&gt;
It should describe the package's main function and point out any special properties of the package to support the user comparing similar packages. For example, the two words &amp;quot;Web Browser&amp;quot; summarize any web browser, but using additional adjectives (like minimalistic, complex, GNOME, KDE, text-based, fast, or author's) helps characterize a specific package.&lt;br /&gt;
&lt;br /&gt;
The RPM spec file contains only the English version to keep the RPM database small.&lt;br /&gt;
&lt;br /&gt;
*The ''Summary'' tag value should not end in a period. If this bothers you from a grammatical point of view, sit down, take a deep breath, and get over it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Group Tag ===&lt;br /&gt;
&lt;br /&gt;
Valid RPM Groups are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Amusements/Games&lt;br /&gt;
Amusements/Graphics&lt;br /&gt;
Applications/Archiving&lt;br /&gt;
Applications/Communications&lt;br /&gt;
Applications/Databases&lt;br /&gt;
Applications/Editors&lt;br /&gt;
Applications/Emulators&lt;br /&gt;
Applications/Engineering&lt;br /&gt;
Applications/File&lt;br /&gt;
Applications/Internet&lt;br /&gt;
Applications/Multimedia&lt;br /&gt;
Applications/Productivity&lt;br /&gt;
Applications/Publishing&lt;br /&gt;
Applications/System&lt;br /&gt;
Applications/Text&lt;br /&gt;
Development/Debuggers&lt;br /&gt;
Development/Languages&lt;br /&gt;
Development/Libraries&lt;br /&gt;
Development/System&lt;br /&gt;
Development/Tools&lt;br /&gt;
Documentation&lt;br /&gt;
System/Boot&lt;br /&gt;
System/Console&lt;br /&gt;
System/I18n/Chinese&lt;br /&gt;
System/I18n/Japanese&lt;br /&gt;
System/I18n/Korean&lt;br /&gt;
System/Packages&lt;br /&gt;
System/Base&lt;br /&gt;
System/Daemons&lt;br /&gt;
System/Kernel&lt;br /&gt;
System/Libraries&lt;br /&gt;
System/Shells&lt;br /&gt;
System/X11&lt;br /&gt;
System/X11/Fonts&lt;br /&gt;
System/X11/Icons&lt;br /&gt;
System/GUI/XFCE&lt;br /&gt;
System/GUI/Other&lt;br /&gt;
System/GUI/GNOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Domain/Subsystem based RPM Groups ====&lt;br /&gt;
&lt;br /&gt;
Following the new architecture and the new [http://meego.com/developers/meego-architecture/meego-architecture-domain-view domain view], RPM groups (The Group tag in the RPM) for core packages will be changed to match the domains and any package in the core that is part of one of the domain will have a corresponding group that matches the architecture.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Domain   &lt;br /&gt;
! Subsystem  &lt;br /&gt;
!Groupname&lt;br /&gt;
| Communications   ||  Cellular Adaptation   ||  Communications/Cellular Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Framework   ||  Communications/Cellular Framework&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Telephony and IM   ||  Communications/Telephony and IM&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Bluetooth   ||  Connectivity/Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Connectivity Adaptation   ||  Communications/Connectivity Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  ConnMan   ||  Communications/ConnMan&lt;br /&gt;
|-&lt;br /&gt;
| Data Management   ||  Content Framework   ||  Data Management/Content Framework&lt;br /&gt;
|-&lt;br /&gt;
| Development Platform   ||  Platform SDK   ||  Development Platform/Platform SDK&lt;br /&gt;
|-&lt;br /&gt;
| Essentials   ||  Base Essentials   ||  Essentials/Base Essentials&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Font Management   ||  Graphics/Font Management&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Display and Graphics Adaptation   ||  Graphics/Display and Graphics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Input Adaptation   ||  Graphics/Input Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Open GL ES   ||  Graphics/Open GL ES&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  X11   ||  Graphics/X11&lt;br /&gt;
|-&lt;br /&gt;
| Kernel   ||  Linux Kernel   ||  Kernel/Linux Kernel&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Framework   ||  Location/Location Framework&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Adaptation   ||  Location/Location Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Audio Adaptation   ||  Multimedia/Audio Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Camera Adaptation   ||  Multimedia/Camera Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Gstreamer   ||  Multimedia/Gstreamer&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging and Video Adaptation   ||  Multimedia/Imaging and Video Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging Codecs   ||  Multimedia/Imaging Codecs&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  PulseAudio   ||  Multimedia/PulseAudio&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Sharing   ||  Multimedia/Sharing&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  UPnP   ||  Multimedia/UPnP&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Backup Framework   ||  Personal Information Management/Backup Framework&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Calendar Engine   ||  Personal Information Management/Calendar Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Contacts Engine   ||  Personal Information Management/Contacts Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Email Engine   ||  Personal Information Management/Email Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Synchronization Framework   ||  Personal Information Management/Synchronization Framework&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt   ||  Qt/Qt&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt Mobility   ||  Qt/Qt Mobility&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt WebKit   ||  Qt/Qt WebKit&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Accounts   ||  Security/Accounts&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Certificate Manager   ||  Security/Certificate Manager&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Integrity Protection Framework   ||  Security/Integrity Protection Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Access Control Framework   ||  Security/Access Control Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Single Sign-On   ||  Security/Single Sign-On&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  SW Distribution Security   ||  Security/SW Distribution Security&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Security Adaptation   ||  Security/Security Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Software Management   ||  Package Manager   ||  Software Management/Package Manager&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Context Framework   ||  System/Context Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  NGF   ||  System/NGF&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Resource Policy   ||  System/Resource Policy&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Adaptation   ||  System/Sensor Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Framework   ||  System/Sensor Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Startup Services   ||  System/Startup Services&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  System Control   ||  System/System Control&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Device Mode Adaptation   ||  System/Device Mode Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Vibra and Haptics Adaptation   ||  System/Vibra and Haptics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BuildRoot tag ===&lt;br /&gt;
The ''BuildRoot'' value MUST be below &amp;lt;code&amp;gt;%{_tmppath}/&amp;lt;/code&amp;gt; and MUST contain at least &amp;lt;code&amp;gt;%{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%{version}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_tmppath}/%{name}-%{version}-%{release}-root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BuildRoot tag can be omitted in packages targeting MeeGo only and is handled directly by rpm in MeeGo, for packages that need to run on other distros with older rpm it should be added for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
=== PreReq ===&lt;br /&gt;
&lt;br /&gt;
Packages should not use the PreReq tag. Once upon a time, in dependency loops PreReq used to &amp;quot;win&amp;quot; over the conventional Requires when RPM determined the installation order in a transaction. This is no longer the case.&lt;br /&gt;
&lt;br /&gt;
=== Explicit Requires ===&lt;br /&gt;
Packages must not contain explicit ''Requires'' on libraries except when absolutely &lt;br /&gt;
necessary. When explicit library ''Requires'' are necessary, there should be a spec file comment justifying it.&lt;br /&gt;
&lt;br /&gt;
We generally rely on rpmbuild to automatically add dependencies on library SONAMEs. &lt;br /&gt;
Modern package management tools are capable of resolving such dependencies to determine &lt;br /&gt;
the required packages. Explicit dependencies on specific package names may aid the &lt;br /&gt;
inexperienced user, who attempts at installing RPM packages manually, however, history &lt;br /&gt;
has shown that such dependencies add confusion when library/files are moved from one &lt;br /&gt;
package to another, when packages get renamed, when one out of multiple alternative &lt;br /&gt;
packages would suffice, and when versioned explicit dependencies become out-of-date and &lt;br /&gt;
inaccurate. Additionally, in some cases, old explicit dependencies on package names &lt;br /&gt;
require unnecessary updates/rebuilds. &lt;br /&gt;
&lt;br /&gt;
Exemplary rationale for a versioned explicit dependency:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # The automatic dependency on libfubar.so.1 is insufficient,&lt;br /&gt;
  # as we strictly need at least the release that fixes two segfaults.&lt;br /&gt;
  Requires: libfubar &amp;gt;= 0:1.2.3-7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packagers should revisit an explicit dependency as appropriate to avoid &lt;br /&gt;
it becoming inaccurate and superfluous.&lt;br /&gt;
&lt;br /&gt;
=== BuildRequires ===&lt;br /&gt;
&lt;br /&gt;
In package development and testing, please verify that your package is not missing any necessary build dependencies. Having proper build requirements saves the time of all developers and testers as well as build systems because they will not need to search for missing build requirements manually. It is also a safety feature that prevents builds with that would not otherwise fail, but would be missing crucial features. For example, a graphical application may exclude PNG support after its '''configure''' script detects that libpng is not installed.&lt;br /&gt;
&lt;br /&gt;
Before adding Build&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Requires to any package, please be comfortable with [[#Requires|  Requires]] .&lt;br /&gt;
&lt;br /&gt;
=== Patches ===&lt;br /&gt;
Each problem should be solved in a separate patch. To allow easy maintenance of patches, every patch should have a header providing the following information:&lt;br /&gt;
&lt;br /&gt;
* Authors' names&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines/signed-process Signed-off-by] tag&lt;br /&gt;
* Detailed description of the fixed problem&lt;br /&gt;
* URL of the original source of the patch if any&lt;br /&gt;
&lt;br /&gt;
The name of a patch file consists of:&lt;br /&gt;
&lt;br /&gt;
* The name and version of the source tarball from which the patched file is derived&lt;br /&gt;
* Some words that characterize the patch content&lt;br /&gt;
* The filename suffix &amp;lt;code class=&amp;quot;filename&amp;quot;&amp;gt;.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Patches are in the unified format (&amp;lt;span&amp;gt;'''diff -u'''&amp;lt;/span&amp;gt;) and should be applied with 1 strip level in the spec file (&amp;lt;span&amp;gt;'''%patch -p1'''&amp;lt;/span&amp;gt;). The only exceptions are the patches obtained from an another primary source site. The original name, suffix, and format is preserved in this case.&lt;br /&gt;
&lt;br /&gt;
Each patch should be compressed with &amp;lt;span&amp;gt;'''bzip2'''&amp;lt;/span&amp;gt; if its size is greater than 100kB. The macros &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%name&amp;lt;/code&amp;gt; and &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%version&amp;lt;/code&amp;gt; should be used whenever possible.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Source:   %{name}-%{version}.tar.bz2&lt;br /&gt;
 Patch0:   %{name}-%{version}-autoconf.patch&lt;br /&gt;
 Patch1:   %{name}-%{version}-gcc31.patch&lt;br /&gt;
&lt;br /&gt;
For the patches to be applied, the patches should be mentioned under %setup. For the above example, this could be done as&lt;br /&gt;
&lt;br /&gt;
 %setup -q&lt;br /&gt;
 %patch0 -p1&lt;br /&gt;
 %patch1 -p1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Patches have to be marked as such in the spec file and should be applied using the internal patch routines available in rpm. Use of alternate patch management system not supported by rpm is not allowed.&lt;br /&gt;
&lt;br /&gt;
=== %clean ===&lt;br /&gt;
&lt;br /&gt;
The %clean section is not required for MeeGo 1.1 and above. Each package for MeeGo 1.0 MUST have a %clean section, which contains rm -rf %{buildroot} (or $RPM_BUILD_ROOT).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Any relevant documentation included in the source distribution should be included in the package. Irrelevant documentation include build instructions, the omnipresent ''INSTALL'' file containing generic build instructions, for example, and documentation for non-Linux systems, e.g. ''README.MSDOS''.  Pay also attention about which subpackage you include documentation in, for example API documentation belongs in the -devel subpackage, not the main one.  Or if there's a lot of documentation, consider putting it into a subpackage.  In this case, it is recommended to use &amp;lt;code&amp;gt;*-doc&amp;lt;/code&amp;gt; as the subpackage name, and &amp;lt;code&amp;gt;Documentation&amp;lt;/code&amp;gt; as the value of the &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Also, if a package includes something as &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, it must not affect the runtime of the application. To summarize: If it is in &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, the program must run properly if it is not present.&lt;br /&gt;
&lt;br /&gt;
== Devel Packages ==&lt;br /&gt;
If the software being packaged contains files intended solely for development, those files should be put in a -devel subpackage. The following are examples of file types which should be in -devel:&lt;br /&gt;
* Header files (such as .h files)&lt;br /&gt;
* Unversioned shared libraries (such as libfoo.so). Versioned shared libraries (such as libfoo.so.3, libfoo.so.3.0.0) should not be in -devel.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is if the file is used for development and not needed for the base package to run properly, it should go in -devel.&lt;br /&gt;
&lt;br /&gt;
=== Requiring Base Package ===&lt;br /&gt;
Devel packages must require the base package using a fully versioned dependency: &amp;lt;code&amp;gt;Requires: %{name} = %{version}-%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Usually, subpackages other than -devel should also require the base package using a fully versioned dependency.&lt;br /&gt;
&lt;br /&gt;
=== Pkgconfig Files ===&lt;br /&gt;
The placement of pkgconfig(.pc) files depends on their usecase. Since they are almost always used for development purposes, they should be placed in a -devel package.&lt;br /&gt;
A reasonable exception is when the main package itself is a development tool not installed in a user runtime, such as gcc or gdb.&lt;br /&gt;
&lt;br /&gt;
== Test Packages ==&lt;br /&gt;
Tests should be included in -test subpackage or separate package according to the following guidelines.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Test_Packaging Test Packaging Guidelines]&lt;br /&gt;
&lt;br /&gt;
== Shared Libraries ==&lt;br /&gt;
Whenever possible (and feasible), MeeGo Packages containing libraries should build them as shared libraries. In addition, every binary RPM package which contains shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If the package has multiple subpackages with libraries, each subpackage should also have a &amp;lt;code&amp;gt;%post/%postun&amp;lt;/code&amp;gt; section that calls &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt;. An example of the correct syntax for this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post -p /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
%postun -p /sbin/ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this specific syntax only works if &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; is the only call in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If you have additional commands to run during the scriptlet, call &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; at the beginning of the scriptlet, like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --add&lt;br /&gt;
&lt;br /&gt;
%postun&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
Configuration files must be marked as such in packages.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, use &amp;lt;code&amp;gt;%config(noreplace)&amp;lt;/code&amp;gt; instead of plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; unless your best, educated guess is that doing so will break things.  In other words, think hard before overwriting local changes in configuration files on package upgrades.  An example case when /not/ to use &amp;lt;code&amp;gt;noreplace&amp;lt;/code&amp;gt; is when a package's configuration file changes so that the new package revision wouldn't work with the config file from the previous package revision.  Whenever plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; is used, add a brief comment to the specfile explaining why.&lt;br /&gt;
&lt;br /&gt;
Don't use %config or %config(noreplace) under /usr. /usr is deemed to not contain configuration files in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Initscripts ==&lt;br /&gt;
&lt;br /&gt;
Currently, only SystemV-style initscripts are supported in MeeGo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Desktop files ==&lt;br /&gt;
&lt;br /&gt;
If a package contains a GUI application, then it needs to also include a properly installed .desktop file.  For the purposes of these guidelines, a GUI application is defined as any application which draws an X window and runs from within that window.  Installed .desktop files MUST follow the [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec]  , paying particular attention to validating correct usage of Name, GenericName, [http://standards.freedesktop.org/menu-spec/latest/apa.html Categories]  ,&lt;br /&gt;
[http://www.freedesktop.org/Standards/startup-notification-spec StartupNotify]&lt;br /&gt;
entries.&lt;br /&gt;
&lt;br /&gt;
=== Icon tag in Desktop Files ===&lt;br /&gt;
The icon tag can be specified in two ways:&lt;br /&gt;
&lt;br /&gt;
* Full path to specific icon file:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=/usr/share/pixmaps/comical.png &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Short name without file extension:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=comical &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short name without file extension is preferred, because it allows for icon theming (it assumes .png by default, then tries .svg and finally .xpm), but either method is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== .desktop file creation ===&lt;br /&gt;
If the package doesn't already include and install its own .desktop file, you need to make your own. You can do this by including a .desktop file you create as a Source: (such as Source3: %{name}.desktop) or generating it in the spec file. Here are the contents of a sample .desktop file (comical.desktop): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Comical&lt;br /&gt;
GenericName=Comic Archive Reader&lt;br /&gt;
Comment=Open .cbr &amp;amp; .cbz files&lt;br /&gt;
Exec=comical&lt;br /&gt;
Icon=comical&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Graphics;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== desktop-file-install usage ===&lt;br /&gt;
It is not simply enough to just include the .desktop file in the package, one MUST run &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; OR &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;%install&amp;lt;/code&amp;gt; (and have &amp;lt;code&amp;gt;BuildRequires: desktop-file-utils&amp;lt;/code&amp;gt;), to help ensure .desktop file safety and spec-compliance. &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; MUST be used if the package does not install the file or there are changes desired to the .desktop file (such as add/removing categories, etc). &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; MAY be used instead if the .desktop file's content/location does not need modification.  Here are some examples of&lt;br /&gt;
usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \&lt;br /&gt;
%{SOURCE3}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--add-category=&amp;quot;AudioVideo&amp;quot;                             \&lt;br /&gt;
--delete-original                                       \&lt;br /&gt;
--dir=%{buildroot}%{_datadir}/applications              \&lt;br /&gt;
%{buildroot}/%{_datadir}/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-validate %{buildroot}/%{_datadir}/applications/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
=== Using %{buildroot} and %{optflags} vs $RPM_BUILD_ROOT and $RPM_OPT_FLAGS ===&lt;br /&gt;
There are two styles of defining the rpm Build Root and Optimization Flags in a spec file:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ||macro style ||  variable style&lt;br /&gt;
|-&lt;br /&gt;
|Build Root||%{buildroot}||$RPM_BUILD_ROOT&lt;br /&gt;
|-&lt;br /&gt;
|Opt. Flags||%{optflags}||$RPM_OPT_FLAGS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is very little value in choosing one style over the other, since they will resolve to the same values in all scenarios. You should pick a style and use it consistently throughout your packaging.&lt;br /&gt;
&lt;br /&gt;
Mixing the two styles, while valid, is bad from a QA and usability point of view, and should not be done in MeeGo packages.&lt;br /&gt;
&lt;br /&gt;
== Handling Locale Files ==&lt;br /&gt;
&lt;br /&gt;
If the package includes translations, add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BuildRequires: gettext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you don't, your package could fail to generate translation files in the buildroot.&lt;br /&gt;
&lt;br /&gt;
MeeGo includes an rpm macro called &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is usually:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In some cases, the application may use a different &amp;quot;name&amp;quot; for its locales. You may have to look at the locale files and see what they are named. If they are named &amp;lt;code&amp;gt;myapp.mo&amp;lt;/code&amp;gt;, then you will need to pass &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;%{name&amp;lt;/code&amp;gt;}.&lt;br /&gt;
After &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; macro. Usually, it will be named &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt;. You should then use this file in the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; list to include the locales detected by &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. To do this, you should include it with the -f parameter to &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are already using the -f parameter for the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; section where the locales should live, just append the contents of &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt; to the end of the file that you are already using with -f. (Note that only one file may be used with &amp;lt;code&amp;gt;%files -f&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Here is an example of proper usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;foo.spec&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure --with-cheese&lt;br /&gt;
make %{?_smp_mflags}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
make DESTDIR=%{buildroot} install&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&lt;br /&gt;
%clean&lt;br /&gt;
rm -rf %{buildroot}&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%doc LICENSE README&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why do we need to use %find_lang? ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; helps keep the spec file simple, and helps avoid several other packaging mistakes.&lt;br /&gt;
&lt;br /&gt;
* Packages that use &amp;lt;code&amp;gt;%{_datadir}/*&amp;lt;/code&amp;gt; to grab all the locale files in one line also grab ownership of the locale directories, which is not permitted.&lt;br /&gt;
* Most packages that have locales have lots of locales. Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is much easier in the spec file than having to do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_datadir}/locale/ar/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/be/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/cs/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/de/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/es/LC_MESSAGES/%{name}.mo&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* As new locale files appear in later package revisions, &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; will automatically include them when it is run, preventing you from having to update the spec any more than is necessary.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; in packages containing locales is a MUST.&lt;br /&gt;
&lt;br /&gt;
== Scriptlets ==&lt;br /&gt;
Great care should be taken when using scriptlets in MeeGo packages. If scriptlets are used, those scriptlets must be sane. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scriptlets requirements ===&lt;br /&gt;
Do not use the &amp;lt;code&amp;gt;Requires(pre,post)&amp;lt;/code&amp;gt; style notation for scriptlet dependencies, because of two bugs in RPM. Instead, they should be split like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Requires(pre): ...&lt;br /&gt;
Requires(post): ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information, see [http://www.redhat.com/archives/fedora-devel-list/2004-April/msg00674.html www.redhat.com] .&lt;br /&gt;
&lt;br /&gt;
=== Running scriptlets only in certain situations ===&lt;br /&gt;
When the rpm command executes the scriptlets in a package it indicates if the action preformed is an install, erase, upgrade or reinstall by passing an integer argument to the script in question according to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          install   erase   upgrade  reinstall&lt;br /&gt;
%pre         1        -         2         2&lt;br /&gt;
%post        1        -         2         2&lt;br /&gt;
%preun       -        0         1         -&lt;br /&gt;
%postun      -        0         1         -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that for example a package that installs an init script with the &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; command should uninstall it only on erase and not upgrade with the following snippet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%preun&lt;br /&gt;
if [ $1 -eq 0 ] ; then&lt;br /&gt;
/sbin/chkconfig --del %{name}&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also &amp;lt;code&amp;gt;/usr/share/doc/rpm-*/triggers&amp;lt;/code&amp;gt;, which gives a more formal, generalized definition about the integer value(s) passed to various scripts.&lt;br /&gt;
&lt;br /&gt;
=== Scriplets are only allowed to write in certain directories ===&lt;br /&gt;
Build scripts of packages (%prep, %build, %install, %check and %clean) may only alter files (create, modify, delete) under %{buildroot}, %{_builddir} and valid temporary locations like /tmp, /var/tmp (or $TMPDIR or %{_tmppath} as set by the rpmbuild process) according to the following matrix&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|         || /tmp, /var/tmp, $TMPDIR, %{_tmppath} || %{_builddir} || %{buildroot}&lt;br /&gt;
|-&lt;br /&gt;
|%prep    || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%build   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%install || yes                                  || yes          || yes&lt;br /&gt;
|-&lt;br /&gt;
|%check   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%clean   || yes                                  || yes          || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Further clarification: That should hold true irrespective of the builder's uid.&lt;br /&gt;
&lt;br /&gt;
== Use of Epochs ==&lt;br /&gt;
The Epoch tag in RPM is to be used only as a last resort, and should be avoided whenever possible. However, it is sometimes necessary to use an Epoch to handle upstream versioning changes or to ease transition from third party repositories. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a package from scratch ==&lt;br /&gt;
&lt;br /&gt;
See [[Spectacle]]&lt;br /&gt;
&lt;br /&gt;
Spectacle is a great tool for straightforward packages, and we have many of those, hundreds, many of those packages already have been using spectacle happily for a while now. Generally, the 80/20 rule applies here, almost 80% of packages in MeeGo can be converted to this format, probably around 20% will need to stay as is for various reasons.&lt;br /&gt;
&lt;br /&gt;
Spectacle in general helps  a lot when you have a package that does:&lt;br /&gt;
* configure&lt;br /&gt;
* make&lt;br /&gt;
* make install&lt;br /&gt;
&lt;br /&gt;
and especially useful when for example you have to manage many build dependencies and patches or for common packaging of perl/python/X packages that usually follows the same packaging work flow. We have plans to add lots of nice features to make packaging easier and more fun with spectacle.&lt;br /&gt;
&lt;br /&gt;
While spectacle has many advanced options to cover all kind of corner cases, it should not be used for complex packages that would require lots of customization, especially now that we support multiple architectures and where we need to apply code and custom scripts to support different scenarios.&lt;br /&gt;
&lt;br /&gt;
Spectacle provides scripts to convert spec files to spectacle, those try to do their best but you SHOULD never just take the output as is and rely on the script, a review of the output is necessary, otherwise you might end up with lots of duplication in the spec file. This is the most common mistake, developers are relying on the output of the conversion script, basically picking some spec file from another distro and converting it. This can lead to major disasters in some cases.&lt;br /&gt;
&lt;br /&gt;
So to summarize:&lt;br /&gt;
* It is NOT mandatory to use spectacle&lt;br /&gt;
* If you try to convert and find yourself spending more than a few minutes on a package, then probably there is something wrong and you should not be using that or you should RTFM.&lt;br /&gt;
* Use it with care, especially when you first import the data from existing spec files or when you first create your YAML file&lt;br /&gt;
* Your distro maintainer might send you a note that certain packages you are maintaining could be converted to spectacle easily, but she/he should not reject your package because it does not use spectacle.&lt;br /&gt;
* If you find yourself forced to edit the spec file manually for some reason, then either:&lt;br /&gt;
** your package is not suitable to be used with spectacle&lt;br /&gt;
** or you might want to ask for a feature to support that special case&lt;br /&gt;
&lt;br /&gt;
== Modifying existing Packages ==&lt;br /&gt;
&lt;br /&gt;
If you base a new package on an existing non-MeeGo package, make sure you verify its correctness of the package  and the spec file and to understand exactly what has been done to package the software exactly. Do not submit a package without knowing what those strange, but innocent-looking commands do.&lt;br /&gt;
&lt;br /&gt;
In particular, you should&lt;br /&gt;
&lt;br /&gt;
* ensure that original tarballs are self-contained pristine tarballs. The tarball should not contain symlinks that reference outside the tarball root directory&lt;br /&gt;
* verify any sources and patches and remove patches or sources that:&lt;br /&gt;
** are related to platforms we do not support (example: sparc, ia64, ppc, ...)&lt;br /&gt;
** Implement features we do not support (example: selinux)&lt;br /&gt;
** Read every patch and understand what it does, if it is needed, put an explanation in the header justifying why the patch is needed.&lt;br /&gt;
* verify that the license stated in the spec file matches the actual license of the software,&lt;br /&gt;
* skim the summary and description for typos and oddities (see Summary and description ),&lt;br /&gt;
* make sure that the correct build root is used,&lt;br /&gt;
* ensure that macro usage is consistent and that the macros are available in MeeGo (see Macros ). &lt;br /&gt;
&lt;br /&gt;
Keep old changelog entries to credit the original authors. Entries that are several years old or refer to ancient versions of the software may be erased. If you end up doing radical changes and re-write most of the spec file anyway, feel free to start the changelog from scratch. In other words, use your best judgement.&lt;br /&gt;
&lt;br /&gt;
== Changelogs ==&lt;br /&gt;
&lt;br /&gt;
This section describes the MeeGo policy for RPM changelogs. (Original changelogs included in the original source are not affected by this policy.) &lt;br /&gt;
&lt;br /&gt;
Please consider that a &amp;quot;normal end user with some technical skills&amp;quot; should be able to read and understand an RPM changelog. Changelog entries have to be in reverse chronological order: newer change log entries are listed above older entries, with the first entry being the most recent. &lt;br /&gt;
&lt;br /&gt;
Please bear in mind theat MeeGo changelogs will be automatically parsed to prepare distribution release notes and to report on bugs and CVEs and malformed entries may not be read correctly.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* MeeGo uses a separate file for package changes which is similar to a debian changelog file. This file is named as the spec file, but ends in *.changes instead of *.spec &lt;br /&gt;
* Entries in the changes file should have the following structure:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* dow mmm dd yyyy Name Goes Here &amp;lt;your@email.com&amp;gt; - [version]&lt;br /&gt;
- comment&lt;br /&gt;
- comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following exceptions are noted through observation:&lt;br /&gt;
* version is often omitted (such as: alsa-utils 1.0.15-1 -&amp;gt; 1.0.16-1)&lt;br /&gt;
* there are multiple changelog entries per version (such as: alsa-utils 1.0.19)&lt;br /&gt;
* the hyphen between email and version is often omitted (such as: alsa-utils)&lt;br /&gt;
* spaces between name and &amp;lt;email&amp;gt; are omitted (such as: Zhang, Qiang Z&amp;lt;qiang.z.zhang@intel.com&amp;gt; nano)&lt;br /&gt;
* name is sometimes omitted (such as: bitstream-vera-fonts nicolas.mailhot at laposte.net)&lt;br /&gt;
* &amp;lt;email&amp;gt; is sometimes omitted (such as: binutils Jim Kingdon)&lt;br /&gt;
This wide variation in formats makes automation tasks harder than they should be. Please use the correct format.&lt;br /&gt;
&lt;br /&gt;
=== External References ===&lt;br /&gt;
&lt;br /&gt;
Each external reference (bug numbers etc) should be of the form:&lt;br /&gt;
 &amp;quot;(&amp;quot; + external reference code + bug number +&amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently defined:&lt;br /&gt;
* MeeGo Bugs : BMC#&lt;br /&gt;
* MeeGo Features: FEA#&lt;br /&gt;
* Common Vulnerability / Exposure : CVE&lt;br /&gt;
&lt;br /&gt;
==== Bug Numbers in the change log ====&lt;br /&gt;
&lt;br /&gt;
During maintenance of a distribution, every change has to be marked with the correct bug number. Normally this has to be an number from https://bugzilla.meego.com/. Add an entry with bugzilla number and a short description of the bug-summary. For example:&lt;br /&gt;
 - Removed invalid desktop Category &amp;quot;Application&amp;quot; (BMC#4654).&lt;br /&gt;
 - Symlink icon to pixmaps dir (BMC#2108)&lt;br /&gt;
 - Added gnome-ui-properties to control-center (BMC#1960).&lt;br /&gt;
&lt;br /&gt;
New packages related to new features will refer to the corresponding bug number in bugzilla, preceded with an FEA.  For example:&lt;br /&gt;
 - Adding Qt Contacts support FEA#8011&lt;br /&gt;
&lt;br /&gt;
==== CVE numbers in change log ====&lt;br /&gt;
&lt;br /&gt;
As with bug numbers: Add a short description (normally the CVE summary should be enough), the Bugzilla and the CVE number to the changelog entry. Examples:&lt;br /&gt;
 - Add gdk-pixbuf-226710.patch (BMC#226710), and (CVE-2007-0010).&lt;br /&gt;
 - More XPM fixes: (CVE-2005-2975) xpm too many colors DoS (BMC#129642)&lt;br /&gt;
 - fix ~/.dmrc symlink attack (BMC#180704), (CVE-2006-2449)&lt;br /&gt;
&lt;br /&gt;
=== Spec File changes ===&lt;br /&gt;
Be as precise as possible! This is especially important if you remove something from the spec file. &lt;br /&gt;
&lt;br /&gt;
* Removing original source code must be declared in spec file with a comment (&amp;quot;useful for FreeBSD only&amp;quot; for example) - not necessary to repeat the comment in specfile.&lt;br /&gt;
* Extra commands (for example during %install) can be illustrated with a short comment in spec file&lt;br /&gt;
* Adding/Removing packages from Requires/Provides must be described in the changelog&lt;br /&gt;
&lt;br /&gt;
=== Source Code changes ===&lt;br /&gt;
&lt;br /&gt;
Document the most important changes but limit verbosity.&lt;br /&gt;
&lt;br /&gt;
* look into the source changelog and pick up the most important changes for the distribution (changes for other operation systems are not important). What has changed in the new version, usually in the level of detail of a NEWS file, the change log files are usually too long. More than '''10-15 lines''' shouldn't be necessary to describe the most important changes.&lt;br /&gt;
* arrange the original changes behind the version update information. Example:&lt;br /&gt;
  - Update to 1.3.2:&lt;br /&gt;
    + fixes memory leak in import function&lt;br /&gt;
    + new API command: unlock_client()&lt;br /&gt;
    + the following bugs are closed by this new upstream release:&lt;br /&gt;
    ++ ............ [MGN:332]&lt;br /&gt;
    ++ .............[MGN:337]&lt;br /&gt;
  - split of devel package&lt;br /&gt;
* If upstream does not provide a meaningful change log, then only do best effort. Don't waste too much time over it.&lt;br /&gt;
* If the upstream tarball really has not changed except for the version number, just the version number in the change log would be fine. Same goes for packages just containing some graphics or theming (unless upstream already provides something that fits). If the upstream changes just consists of &amp;quot;updated translation&amp;quot; or &amp;quot;several bug fixes&amp;quot; even that can be sufficient for a changelog entry (unless these bug fixes contain something you find worth mentioning).&lt;br /&gt;
&lt;br /&gt;
== Packaging Static Libraries ==&lt;br /&gt;
Packages including libraries should exclude static libs as far as possible (eg by configuring with ''--disable-static'').  Static libraries should only be included in exceptional circumstances.  Applications linking against libraries should as far as possible link against shared libraries not static versions.&lt;br /&gt;
&lt;br /&gt;
Libtool archives, ''foo.la'' files, should not be included. Packages using libtool will install these by default even if you configure with ''--disable-static'', so they may need to be removed before packaging.  Due to bugs in older versions of libtool or bugs in programs  that use it, there are times when it is not always possible to remove *.la files without modifying the program.  In most cases it is fairly easy to work with upstream to fix these issues.  Note that if you are updating a library in a stable release (not devel) and the package already contains *.la files, removing the *.la files should be treated as an API/ABI change -- ie: Removing them changes the interface that the library gives to the rest of the world and should not be undertaken lightly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packaging Static Libraries ===&lt;br /&gt;
* In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.&lt;br /&gt;
&lt;br /&gt;
* We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:&lt;br /&gt;
# '''Static libraries and shared libraries.''' In this case, the static libraries must be placed in a ''*-static'' subpackage. Separating the static libraries from the other development files in ''*-devel'' allow us to track this usage by checking which packages &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries.&lt;br /&gt;
# '''Static libraries only.''' When a package only provides static libraries you can place all the static library files in the ''*-devel'' subpackage.  When doing this you also must have a virtual Provide for the ''*-static'' package:&lt;br /&gt;
&amp;lt;pre&amp;gt;%package devel&lt;br /&gt;
Provides: foo-static = %{version}-%{release}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages which explicitly need to link against the static version must &amp;lt;code&amp;gt;BuildRequire: foo-static&amp;lt;/code&amp;gt;, so that the usage can be tracked.&lt;br /&gt;
&lt;br /&gt;
* If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the ''*-devel'' subpackage. The devel subpackage must have a virtual Provide for the ''*-static'' package, and packages dependent on it must &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Staticly Linking Executables ===&lt;br /&gt;
* Static linkage is a special exception and should be decided on a case-by-case basis.  The packager must provide rationale for linking statically, including precedences where available, to release engineering for approval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Packaging]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Packaging/Guidelines</id>
		<title>Packaging/Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Packaging/Guidelines"/>
				<updated>2010-12-10T12:49:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Domain/Subsystem based RPM Groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Packaging Guidelines =&lt;br /&gt;
&lt;br /&gt;
Guidelines below were adapted for MeeGo from Moblin, OpenSUSE, Fedora and other distributions.&lt;br /&gt;
&lt;br /&gt;
== Maintaining a Package ==&lt;br /&gt;
Every package in MeeGo needs a maintainer (AKA owner, bug owner). Any package without an owner will automatically be nominated for deletion from MeeGo. A package maintainer is responsible for making sure that&lt;br /&gt;
* packages are up to date with latest upstream&lt;br /&gt;
* packages consistently build in the MeeGo build system and fix build failures when they occur&lt;br /&gt;
* package meta data in the RPM spec file is accurate&lt;br /&gt;
* the license of the package is correct&lt;br /&gt;
* she/he follow upstream for any critical security issues and fix them ASAP&lt;br /&gt;
* she/he Provides information about major changes to other packagers and maintainer to allow enough time for fixing compatibility issues&lt;br /&gt;
&lt;br /&gt;
Since the data about ownership of packages is not maintained anywhere right now we are starting to use available meta data fields in the build system to track ownership. This will be better integrated and managed at a later point, but to be able to start somewhere MeeGo will use the bugowner key available for every package. We will start adding the metadata about maintainers (bugowners) in the build system and we will have agrace period for this data to be supplied and added to the build system. After the grace period, packages without maintainer will be reviewed and any packages without a maintainer will be nominated for deletion.&lt;br /&gt;
&lt;br /&gt;
To add yourself as a bugowner of a package, please follow the steps below:&lt;br /&gt;
* Update to the most recent osc version (0.129) from the MeeGo tools repository (note: this is essential, since the needed options are not released upstream yet)&lt;br /&gt;
* Identify the packages  of which you are the ultimate maintainer&lt;br /&gt;
* Do the following for every package you maintain in the Trunk:* projects:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
osc reqms --role bugowner &amp;lt;project&amp;gt; &amp;lt;package&amp;gt; -m &amp;quot;I want to own this because I love this package&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your request will be sent and someone in release engineering will approve it&lt;br /&gt;
&lt;br /&gt;
== Package Naming ==&lt;br /&gt;
* Dash '-' must be used as the delimiter for name parts. &lt;br /&gt;
* Do NOT use an underscore '_', a plus '+', or a period '.' as a delimiter. &lt;br /&gt;
* The spec file should be named using the %{name}.spec scheme which should also correspond to the package name within a project in the build system.&lt;br /&gt;
&lt;br /&gt;
== Version and Release ==&lt;br /&gt;
&lt;br /&gt;
Package Versions look like : X.Y.Z-R.B&lt;br /&gt;
* X.Y.Z is the 'Version' number - determined by the source package.&lt;br /&gt;
* R is the 'Release' number which is automatically incremented by OBS whenever a source/packaging changes (eg a check-in or request acceptance)&lt;br /&gt;
* B is the build number which is incremented when the package is rebuilt due to a dependency change.&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The Version field in the spec file is where you should put the current version of the software being packaged. &lt;br /&gt;
There are four cases where the version contains non-numeric characters:&lt;br /&gt;
&lt;br /&gt;
* Pre-release packages: Packages released as &amp;quot;pre-release&amp;quot; versions, prior to a &amp;quot;final&amp;quot; version. Example tags include &amp;quot;alpha&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;rc&amp;quot;, &amp;quot;cvs&amp;quot;, &amp;quot;git&amp;quot;, &amp;quot;svn&amp;quot;, etc... Details can be found below: Non-Numeric Version.&lt;br /&gt;
* Post-release packages: Packages released after a &amp;quot;final&amp;quot; version. These packages contain the same numeric version as the &amp;quot;final&amp;quot; version, but have an additional non-numeric identifier. This mechanism may also be used for packaging only changes to an upstream package.&lt;br /&gt;
* Snapshot packages: Packages built from SCM snapshots. These packages could be either &amp;quot;pre&amp;quot; or &amp;quot;post&amp;quot; release packages. &lt;br /&gt;
&lt;br /&gt;
==== Non-Numeric Version ====&lt;br /&gt;
&lt;br /&gt;
We can use letters and tilde into the version tag. We do not use the Release field for this.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Let's assume the following Qt versions:&lt;br /&gt;
Qt 4.7.0~beta1&lt;br /&gt;
Qt 4.7.0~beta1+git1&lt;br /&gt;
Qt 4.7.0~beta2&lt;br /&gt;
Qt 4.7.0&lt;br /&gt;
&lt;br /&gt;
Version comparison results:&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1 4.7.0~beta1+git1&lt;br /&gt;
0:4.7.0~beta1+git1-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1+git2 4.7.0~beta2&lt;br /&gt;
0:4.7.0~beta2-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta2 4.7.0&lt;br /&gt;
0:4.7.0-None is newer&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
4.7.0~beta1 &amp;lt; 4.7.0~beta1+git1 &amp;lt; 4.7.0~beta2 &amp;lt; 4.7.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the ~ comparison order is specific to MeeGo rpm (http://rpm.org/ticket/56).&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
&lt;br /&gt;
This field is handled by the build system to be able to manage automated builds. The initial setting in the spec file is used by the build system but in many cases it does not need to be changed.&lt;br /&gt;
&lt;br /&gt;
There is no need for the %{dist} macro in the release field. This is also handled directly by the build system.&lt;br /&gt;
&lt;br /&gt;
The release number is set to zero with any version update. It is increased by one with any change in the package.&lt;br /&gt;
&lt;br /&gt;
We can put letters into the version tag, so we do not use the Release field for this. Details can be found above.&lt;br /&gt;
&lt;br /&gt;
If you build the package outside of the OBS or if you copy a package then you will of course not get the correct Release or Build values.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
*The ''Packager'' tag should not be used in spec files. The identities of the packagers are evident from the changelog entries. By not using the ''Packager'' tag, you also avoid seeing bad binaries rebuilt by someone else with your name in the header.  See also the '''Maximum RPM definition of the Packager tag''' at [http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-PACKAGER-TAG www.rpm.org] .  If you need to include information about the packager in the rpms ''you'' built, use &amp;lt;code&amp;gt;%packager&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;~/.rpmmacros&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
*The ''Vendor'' tag should not be used. It is set automatically by the build system.&lt;br /&gt;
&lt;br /&gt;
*Usually, the ''Pre&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Req'' tag should be replaced by plain ''Requires''.   For more info, see Maximum RPM snapshot's  [http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-manual-dependencies.html#S3-RPM-DEPEND-FINE-GRAINED fine grained dependencies chapter] .&lt;br /&gt;
* The ''Source'' tag documents where to find the upstream sources for the rpm.  In most cases this should be a complete URL to the upstream tarball.  &lt;br /&gt;
=== Summary Tag ===&lt;br /&gt;
The summary is a single line string describing the package. The maximum length is 80 characters. It should fit all standard situations and not assume any special context. It should be helpful alone, in alphabetically sorted or unsorted lists of some selected packages, and in alphabetically sorted or unsorted lists of all packages.&lt;br /&gt;
&lt;br /&gt;
It should describe the package's main function and point out any special properties of the package to support the user comparing similar packages. For example, the two words &amp;quot;Web Browser&amp;quot; summarize any web browser, but using additional adjectives (like minimalistic, complex, GNOME, KDE, text-based, fast, or author's) helps characterize a specific package.&lt;br /&gt;
&lt;br /&gt;
The RPM spec file contains only the English version to keep the RPM database small.&lt;br /&gt;
&lt;br /&gt;
*The ''Summary'' tag value should not end in a period. If this bothers you from a grammatical point of view, sit down, take a deep breath, and get over it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Group Tag ===&lt;br /&gt;
&lt;br /&gt;
Valid RPM Groups are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Amusements/Games&lt;br /&gt;
Amusements/Graphics&lt;br /&gt;
Applications/Archiving&lt;br /&gt;
Applications/Communications&lt;br /&gt;
Applications/Databases&lt;br /&gt;
Applications/Editors&lt;br /&gt;
Applications/Emulators&lt;br /&gt;
Applications/Engineering&lt;br /&gt;
Applications/File&lt;br /&gt;
Applications/Internet&lt;br /&gt;
Applications/Multimedia&lt;br /&gt;
Applications/Productivity&lt;br /&gt;
Applications/Publishing&lt;br /&gt;
Applications/System&lt;br /&gt;
Applications/Text&lt;br /&gt;
Development/Debuggers&lt;br /&gt;
Development/Languages&lt;br /&gt;
Development/Libraries&lt;br /&gt;
Development/System&lt;br /&gt;
Development/Tools&lt;br /&gt;
Documentation&lt;br /&gt;
System/Boot&lt;br /&gt;
System/Console&lt;br /&gt;
System/I18n/Chinese&lt;br /&gt;
System/I18n/Japanese&lt;br /&gt;
System/I18n/Korean&lt;br /&gt;
System/Packages&lt;br /&gt;
System/Base&lt;br /&gt;
System/Daemons&lt;br /&gt;
System/Kernel&lt;br /&gt;
System/Libraries&lt;br /&gt;
System/Shells&lt;br /&gt;
System/X11&lt;br /&gt;
System/X11/Fonts&lt;br /&gt;
System/X11/Icons&lt;br /&gt;
System/GUI/XFCE&lt;br /&gt;
System/GUI/Other&lt;br /&gt;
System/GUI/GNOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Domain/Subsystem based RPM Groups ====&lt;br /&gt;
&lt;br /&gt;
Following the new architecture and the new [http://meego.com/developers/meego-architecture/meego-architecture-domain-view domain view], RPM groups (The Group tag in the RPM) for core packages will be changed to match the domains and any package in the core that is part of one of the domain will have a corresponding group that matches the architecture.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Domain   &lt;br /&gt;
! Subsystem  &lt;br /&gt;
!Groupname&lt;br /&gt;
| Communications   ||  Cellular Adaptation   ||  Communications/Cellular Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Framework   ||  Communications/Cellular Framework&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Telephony and IM   ||  Communications/Telephony and IM&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Bluetooth   ||  Connectivity/Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Connectivity Adaptation   ||  Communications/Connectivity Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  ConnMan   ||  Communications/ConnMan&lt;br /&gt;
|-&lt;br /&gt;
| Data Management   ||  Content Framework   ||  Data Management/Content Framework&lt;br /&gt;
|-&lt;br /&gt;
| Development Platform   ||  Platform SDK   ||  Development Platform/Platform SDK&lt;br /&gt;
|-&lt;br /&gt;
| Essentials   ||  Base Essentials   ||  Essentials/Base Essentials&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Font Management   ||  Graphics/Font Management&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Display and Graphics Adaptation   ||  Graphics/Display and Graphics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Input Adaptation   ||  Graphics/Input Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Open GL ES   ||  Graphics/Open GL ES&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  X11   ||  Graphics/X11&lt;br /&gt;
|-&lt;br /&gt;
| Kernel   ||  Linux Kernel   ||  Kernel/Linux Kernel&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Framework   ||  Location/Location Framework&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Adaptation   ||  Location/Location Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Audio Adaptation   ||  Multimedia/Audio Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Camera Adaptation   ||  Multimedia/Camera Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Gstreamer   ||  Multimedia/Gstreamer&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging and Video Adaptation   ||  Multimedia/Imaging and Video Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging Codecs   ||  Multimedia/Imaging Codecs&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  PulseAudio   ||  Multimedia/PulseAudio&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Sharing   ||  Multimedia/Sharing&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  UPnP   ||  Multimedia/UPnP&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Backup Framework   ||  Personal Information Management/Backup Framework&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Calendar Engine   ||  Personal Information Management/Calendar Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Contacts Engine   ||  Personal Information Management/Contacts Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Email Engine   ||  Personal Information Management/Email Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Synchronization Framework   ||  Personal Information Management/Synchronization Framework&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt   ||  Qt/Qt&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt Mobility   ||  Qt/Qt Mobility&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt WebKit   ||  Qt/Qt WebKit&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Web Runtime   ||  Qt/Web Runtime&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Accounts   ||  Security/Accounts&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Certificate Manager   ||  Security/Certificate Manager&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Integrity Protection Framework   ||  Security/Integrity Protection Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Access Control Framework   ||  Security/Access Control Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Single Sign-On   ||  Security/Single Sign-On&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  SW Distribution Security   ||  Security/SW Distribution Security&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Security Adaptation   ||  Security/Security Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Software Management   ||  Package Manager   ||  Software Management/Package Manager&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Context Framework   ||  System/Context Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  NGF   ||  System/NGF&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Resource Policy   ||  System/Resource Policy&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Adaptation   ||  System/Sensor Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Framework   ||  System/Sensor Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Startup Services   ||  System/Startup Services&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  System Control   ||  System/System Control&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Device Mode Adaptation   ||  System/Device Mode Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Vibra and Haptics Adaptation   ||  System/Vibra and Haptics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BuildRoot tag ===&lt;br /&gt;
The ''BuildRoot'' value MUST be below &amp;lt;code&amp;gt;%{_tmppath}/&amp;lt;/code&amp;gt; and MUST contain at least &amp;lt;code&amp;gt;%{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%{version}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_tmppath}/%{name}-%{version}-%{release}-root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BuildRoot tag can be omitted in packages targeting MeeGo only and is handled directly by rpm in MeeGo, for packages that need to run on other distros with older rpm it should be added for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
=== PreReq ===&lt;br /&gt;
&lt;br /&gt;
Packages should not use the PreReq tag. Once upon a time, in dependency loops PreReq used to &amp;quot;win&amp;quot; over the conventional Requires when RPM determined the installation order in a transaction. This is no longer the case.&lt;br /&gt;
&lt;br /&gt;
=== Explicit Requires ===&lt;br /&gt;
Packages must not contain explicit ''Requires'' on libraries except when absolutely &lt;br /&gt;
necessary. When explicit library ''Requires'' are necessary, there should be a spec file comment justifying it.&lt;br /&gt;
&lt;br /&gt;
We generally rely on rpmbuild to automatically add dependencies on library SONAMEs. &lt;br /&gt;
Modern package management tools are capable of resolving such dependencies to determine &lt;br /&gt;
the required packages. Explicit dependencies on specific package names may aid the &lt;br /&gt;
inexperienced user, who attempts at installing RPM packages manually, however, history &lt;br /&gt;
has shown that such dependencies add confusion when library/files are moved from one &lt;br /&gt;
package to another, when packages get renamed, when one out of multiple alternative &lt;br /&gt;
packages would suffice, and when versioned explicit dependencies become out-of-date and &lt;br /&gt;
inaccurate. Additionally, in some cases, old explicit dependencies on package names &lt;br /&gt;
require unnecessary updates/rebuilds. &lt;br /&gt;
&lt;br /&gt;
Exemplary rationale for a versioned explicit dependency:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # The automatic dependency on libfubar.so.1 is insufficient,&lt;br /&gt;
  # as we strictly need at least the release that fixes two segfaults.&lt;br /&gt;
  Requires: libfubar &amp;gt;= 0:1.2.3-7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packagers should revisit an explicit dependency as appropriate to avoid &lt;br /&gt;
it becoming inaccurate and superfluous.&lt;br /&gt;
&lt;br /&gt;
=== BuildRequires ===&lt;br /&gt;
&lt;br /&gt;
In package development and testing, please verify that your package is not missing any necessary build dependencies. Having proper build requirements saves the time of all developers and testers as well as build systems because they will not need to search for missing build requirements manually. It is also a safety feature that prevents builds with that would not otherwise fail, but would be missing crucial features. For example, a graphical application may exclude PNG support after its '''configure''' script detects that libpng is not installed.&lt;br /&gt;
&lt;br /&gt;
Before adding Build&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Requires to any package, please be comfortable with [[#Requires|  Requires]] .&lt;br /&gt;
&lt;br /&gt;
=== Patches ===&lt;br /&gt;
Each problem should be solved in a separate patch. To allow easy maintenance of patches, every patch should have a header providing the following information:&lt;br /&gt;
&lt;br /&gt;
* Authors' names&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines/signed-process Signed-off-by] tag&lt;br /&gt;
* Detailed description of the fixed problem&lt;br /&gt;
* URL of the original source of the patch if any&lt;br /&gt;
&lt;br /&gt;
The name of a patch file consists of:&lt;br /&gt;
&lt;br /&gt;
* The name and version of the source tarball from which the patched file is derived&lt;br /&gt;
* Some words that characterize the patch content&lt;br /&gt;
* The filename suffix &amp;lt;code class=&amp;quot;filename&amp;quot;&amp;gt;.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Patches are in the unified format (&amp;lt;span&amp;gt;'''diff -u'''&amp;lt;/span&amp;gt;) and should be applied with 1 strip level in the spec file (&amp;lt;span&amp;gt;'''%patch -p1'''&amp;lt;/span&amp;gt;). The only exceptions are the patches obtained from an another primary source site. The original name, suffix, and format is preserved in this case.&lt;br /&gt;
&lt;br /&gt;
Each patch should be compressed with &amp;lt;span&amp;gt;'''bzip2'''&amp;lt;/span&amp;gt; if its size is greater than 100kB. The macros &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%name&amp;lt;/code&amp;gt; and &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%version&amp;lt;/code&amp;gt; should be used whenever possible.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Source:   %{name}-%{version}.tar.bz2&lt;br /&gt;
 Patch0:   %{name}-%{version}-autoconf.patch&lt;br /&gt;
 Patch1:   %{name}-%{version}-gcc31.patch&lt;br /&gt;
&lt;br /&gt;
For the patches to be applied, the patches should be mentioned under %setup. For the above example, this could be done as&lt;br /&gt;
&lt;br /&gt;
 %setup -q&lt;br /&gt;
 %patch0 -p1&lt;br /&gt;
 %patch1 -p1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Patches have to be marked as such in the spec file and should be applied using the internal patch routines available in rpm. Use of alternate patch management system not supported by rpm is not allowed.&lt;br /&gt;
&lt;br /&gt;
=== %clean ===&lt;br /&gt;
&lt;br /&gt;
The %clean section is not required for MeeGo 1.1 and above. Each package for MeeGo 1.0 MUST have a %clean section, which contains rm -rf %{buildroot} (or $RPM_BUILD_ROOT).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Any relevant documentation included in the source distribution should be included in the package. Irrelevant documentation include build instructions, the omnipresent ''INSTALL'' file containing generic build instructions, for example, and documentation for non-Linux systems, e.g. ''README.MSDOS''.  Pay also attention about which subpackage you include documentation in, for example API documentation belongs in the -devel subpackage, not the main one.  Or if there's a lot of documentation, consider putting it into a subpackage.  In this case, it is recommended to use &amp;lt;code&amp;gt;*-doc&amp;lt;/code&amp;gt; as the subpackage name, and &amp;lt;code&amp;gt;Documentation&amp;lt;/code&amp;gt; as the value of the &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Also, if a package includes something as &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, it must not affect the runtime of the application. To summarize: If it is in &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, the program must run properly if it is not present.&lt;br /&gt;
&lt;br /&gt;
== Devel Packages ==&lt;br /&gt;
If the software being packaged contains files intended solely for development, those files should be put in a -devel subpackage. The following are examples of file types which should be in -devel:&lt;br /&gt;
* Header files (such as .h files)&lt;br /&gt;
* Unversioned shared libraries (such as libfoo.so). Versioned shared libraries (such as libfoo.so.3, libfoo.so.3.0.0) should not be in -devel.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is if the file is used for development and not needed for the base package to run properly, it should go in -devel.&lt;br /&gt;
&lt;br /&gt;
=== Requiring Base Package ===&lt;br /&gt;
Devel packages must require the base package using a fully versioned dependency: &amp;lt;code&amp;gt;Requires: %{name} = %{version}-%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Usually, subpackages other than -devel should also require the base package using a fully versioned dependency.&lt;br /&gt;
&lt;br /&gt;
=== Pkgconfig Files ===&lt;br /&gt;
The placement of pkgconfig(.pc) files depends on their usecase. Since they are almost always used for development purposes, they should be placed in a -devel package.&lt;br /&gt;
A reasonable exception is when the main package itself is a development tool not installed in a user runtime, such as gcc or gdb.&lt;br /&gt;
&lt;br /&gt;
== Test Packages ==&lt;br /&gt;
Tests should be included in -test subpackage or separate package according to the following guidelines.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Test_Packaging Test Packaging Guidelines]&lt;br /&gt;
&lt;br /&gt;
== Shared Libraries ==&lt;br /&gt;
Whenever possible (and feasible), MeeGo Packages containing libraries should build them as shared libraries. In addition, every binary RPM package which contains shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If the package has multiple subpackages with libraries, each subpackage should also have a &amp;lt;code&amp;gt;%post/%postun&amp;lt;/code&amp;gt; section that calls &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt;. An example of the correct syntax for this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post -p /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
%postun -p /sbin/ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this specific syntax only works if &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; is the only call in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If you have additional commands to run during the scriptlet, call &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; at the beginning of the scriptlet, like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --add&lt;br /&gt;
&lt;br /&gt;
%postun&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
Configuration files must be marked as such in packages.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, use &amp;lt;code&amp;gt;%config(noreplace)&amp;lt;/code&amp;gt; instead of plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; unless your best, educated guess is that doing so will break things.  In other words, think hard before overwriting local changes in configuration files on package upgrades.  An example case when /not/ to use &amp;lt;code&amp;gt;noreplace&amp;lt;/code&amp;gt; is when a package's configuration file changes so that the new package revision wouldn't work with the config file from the previous package revision.  Whenever plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; is used, add a brief comment to the specfile explaining why.&lt;br /&gt;
&lt;br /&gt;
Don't use %config or %config(noreplace) under /usr. /usr is deemed to not contain configuration files in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Initscripts ==&lt;br /&gt;
&lt;br /&gt;
Currently, only SystemV-style initscripts are supported in MeeGo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Desktop files ==&lt;br /&gt;
&lt;br /&gt;
If a package contains a GUI application, then it needs to also include a properly installed .desktop file.  For the purposes of these guidelines, a GUI application is defined as any application which draws an X window and runs from within that window.  Installed .desktop files MUST follow the [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec]  , paying particular attention to validating correct usage of Name, GenericName, [http://standards.freedesktop.org/menu-spec/latest/apa.html Categories]  ,&lt;br /&gt;
[http://www.freedesktop.org/Standards/startup-notification-spec StartupNotify]&lt;br /&gt;
entries.&lt;br /&gt;
&lt;br /&gt;
=== Icon tag in Desktop Files ===&lt;br /&gt;
The icon tag can be specified in two ways:&lt;br /&gt;
&lt;br /&gt;
* Full path to specific icon file:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=/usr/share/pixmaps/comical.png &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Short name without file extension:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=comical &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short name without file extension is preferred, because it allows for icon theming (it assumes .png by default, then tries .svg and finally .xpm), but either method is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== .desktop file creation ===&lt;br /&gt;
If the package doesn't already include and install its own .desktop file, you need to make your own. You can do this by including a .desktop file you create as a Source: (such as Source3: %{name}.desktop) or generating it in the spec file. Here are the contents of a sample .desktop file (comical.desktop): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Comical&lt;br /&gt;
GenericName=Comic Archive Reader&lt;br /&gt;
Comment=Open .cbr &amp;amp; .cbz files&lt;br /&gt;
Exec=comical&lt;br /&gt;
Icon=comical&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Graphics;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== desktop-file-install usage ===&lt;br /&gt;
It is not simply enough to just include the .desktop file in the package, one MUST run &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; OR &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;%install&amp;lt;/code&amp;gt; (and have &amp;lt;code&amp;gt;BuildRequires: desktop-file-utils&amp;lt;/code&amp;gt;), to help ensure .desktop file safety and spec-compliance. &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; MUST be used if the package does not install the file or there are changes desired to the .desktop file (such as add/removing categories, etc). &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; MAY be used instead if the .desktop file's content/location does not need modification.  Here are some examples of&lt;br /&gt;
usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \&lt;br /&gt;
%{SOURCE3}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--add-category=&amp;quot;AudioVideo&amp;quot;                             \&lt;br /&gt;
--delete-original                                       \&lt;br /&gt;
--dir=%{buildroot}%{_datadir}/applications              \&lt;br /&gt;
%{buildroot}/%{_datadir}/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-validate %{buildroot}/%{_datadir}/applications/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
=== Using %{buildroot} and %{optflags} vs $RPM_BUILD_ROOT and $RPM_OPT_FLAGS ===&lt;br /&gt;
There are two styles of defining the rpm Build Root and Optimization Flags in a spec file:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ||macro style ||  variable style&lt;br /&gt;
|-&lt;br /&gt;
|Build Root||%{buildroot}||$RPM_BUILD_ROOT&lt;br /&gt;
|-&lt;br /&gt;
|Opt. Flags||%{optflags}||$RPM_OPT_FLAGS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is very little value in choosing one style over the other, since they will resolve to the same values in all scenarios. You should pick a style and use it consistently throughout your packaging.&lt;br /&gt;
&lt;br /&gt;
Mixing the two styles, while valid, is bad from a QA and usability point of view, and should not be done in MeeGo packages.&lt;br /&gt;
&lt;br /&gt;
== Handling Locale Files ==&lt;br /&gt;
&lt;br /&gt;
If the package includes translations, add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BuildRequires: gettext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you don't, your package could fail to generate translation files in the buildroot.&lt;br /&gt;
&lt;br /&gt;
MeeGo includes an rpm macro called &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is usually:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In some cases, the application may use a different &amp;quot;name&amp;quot; for its locales. You may have to look at the locale files and see what they are named. If they are named &amp;lt;code&amp;gt;myapp.mo&amp;lt;/code&amp;gt;, then you will need to pass &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;%{name&amp;lt;/code&amp;gt;}.&lt;br /&gt;
After &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; macro. Usually, it will be named &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt;. You should then use this file in the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; list to include the locales detected by &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. To do this, you should include it with the -f parameter to &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are already using the -f parameter for the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; section where the locales should live, just append the contents of &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt; to the end of the file that you are already using with -f. (Note that only one file may be used with &amp;lt;code&amp;gt;%files -f&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Here is an example of proper usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;foo.spec&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure --with-cheese&lt;br /&gt;
make %{?_smp_mflags}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
make DESTDIR=%{buildroot} install&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&lt;br /&gt;
%clean&lt;br /&gt;
rm -rf %{buildroot}&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%doc LICENSE README&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why do we need to use %find_lang? ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; helps keep the spec file simple, and helps avoid several other packaging mistakes.&lt;br /&gt;
&lt;br /&gt;
* Packages that use &amp;lt;code&amp;gt;%{_datadir}/*&amp;lt;/code&amp;gt; to grab all the locale files in one line also grab ownership of the locale directories, which is not permitted.&lt;br /&gt;
* Most packages that have locales have lots of locales. Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is much easier in the spec file than having to do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_datadir}/locale/ar/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/be/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/cs/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/de/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/es/LC_MESSAGES/%{name}.mo&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* As new locale files appear in later package revisions, &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; will automatically include them when it is run, preventing you from having to update the spec any more than is necessary.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; in packages containing locales is a MUST.&lt;br /&gt;
&lt;br /&gt;
== Scriptlets ==&lt;br /&gt;
Great care should be taken when using scriptlets in MeeGo packages. If scriptlets are used, those scriptlets must be sane. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scriptlets requirements ===&lt;br /&gt;
Do not use the &amp;lt;code&amp;gt;Requires(pre,post)&amp;lt;/code&amp;gt; style notation for scriptlet dependencies, because of two bugs in RPM. Instead, they should be split like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Requires(pre): ...&lt;br /&gt;
Requires(post): ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information, see [http://www.redhat.com/archives/fedora-devel-list/2004-April/msg00674.html www.redhat.com] .&lt;br /&gt;
&lt;br /&gt;
=== Running scriptlets only in certain situations ===&lt;br /&gt;
When the rpm command executes the scriptlets in a package it indicates if the action preformed is an install, erase, upgrade or reinstall by passing an integer argument to the script in question according to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          install   erase   upgrade  reinstall&lt;br /&gt;
%pre         1        -         2         2&lt;br /&gt;
%post        1        -         2         2&lt;br /&gt;
%preun       -        0         1         -&lt;br /&gt;
%postun      -        0         1         -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that for example a package that installs an init script with the &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; command should uninstall it only on erase and not upgrade with the following snippet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%preun&lt;br /&gt;
if [ $1 -eq 0 ] ; then&lt;br /&gt;
/sbin/chkconfig --del %{name}&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also &amp;lt;code&amp;gt;/usr/share/doc/rpm-*/triggers&amp;lt;/code&amp;gt;, which gives a more formal, generalized definition about the integer value(s) passed to various scripts.&lt;br /&gt;
&lt;br /&gt;
=== Scriplets are only allowed to write in certain directories ===&lt;br /&gt;
Build scripts of packages (%prep, %build, %install, %check and %clean) may only alter files (create, modify, delete) under %{buildroot}, %{_builddir} and valid temporary locations like /tmp, /var/tmp (or $TMPDIR or %{_tmppath} as set by the rpmbuild process) according to the following matrix&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|         || /tmp, /var/tmp, $TMPDIR, %{_tmppath} || %{_builddir} || %{buildroot}&lt;br /&gt;
|-&lt;br /&gt;
|%prep    || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%build   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%install || yes                                  || yes          || yes&lt;br /&gt;
|-&lt;br /&gt;
|%check   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%clean   || yes                                  || yes          || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Further clarification: That should hold true irrespective of the builder's uid.&lt;br /&gt;
&lt;br /&gt;
== Use of Epochs ==&lt;br /&gt;
The Epoch tag in RPM is to be used only as a last resort, and should be avoided whenever possible. However, it is sometimes necessary to use an Epoch to handle upstream versioning changes or to ease transition from third party repositories. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a package from scratch ==&lt;br /&gt;
&lt;br /&gt;
See [[Spectacle]]&lt;br /&gt;
&lt;br /&gt;
Spectacle is a great tool for straightforward packages, and we have many of those, hundreds, many of those packages already have been using spectacle happily for a while now. Generally, the 80/20 rule applies here, almost 80% of packages in MeeGo can be converted to this format, probably around 20% will need to stay as is for various reasons.&lt;br /&gt;
&lt;br /&gt;
Spectacle in general helps  a lot when you have a package that does:&lt;br /&gt;
* configure&lt;br /&gt;
* make&lt;br /&gt;
* make install&lt;br /&gt;
&lt;br /&gt;
and especially useful when for example you have to manage many build dependencies and patches or for common packaging of perl/python/X packages that usually follows the same packaging work flow. We have plans to add lots of nice features to make packaging easier and more fun with spectacle.&lt;br /&gt;
&lt;br /&gt;
While spectacle has many advanced options to cover all kind of corner cases, it should not be used for complex packages that would require lots of customization, especially now that we support multiple architectures and where we need to apply code and custom scripts to support different scenarios.&lt;br /&gt;
&lt;br /&gt;
Spectacle provides scripts to convert spec files to spectacle, those try to do their best but you SHOULD never just take the output as is and rely on the script, a review of the output is necessary, otherwise you might end up with lots of duplication in the spec file. This is the most common mistake, developers are relying on the output of the conversion script, basically picking some spec file from another distro and converting it. This can lead to major disasters in some cases.&lt;br /&gt;
&lt;br /&gt;
So to summarize:&lt;br /&gt;
* It is NOT mandatory to use spectacle&lt;br /&gt;
* If you try to convert and find yourself spending more than a few minutes on a package, then probably there is something wrong and you should not be using that or you should RTFM.&lt;br /&gt;
* Use it with care, especially when you first import the data from existing spec files or when you first create your YAML file&lt;br /&gt;
* Your distro maintainer might send you a note that certain packages you are maintaining could be converted to spectacle easily, but she/he should not reject your package because it does not use spectacle.&lt;br /&gt;
* If you find yourself forced to edit the spec file manually for some reason, then either:&lt;br /&gt;
** your package is not suitable to be used with spectacle&lt;br /&gt;
** or you might want to ask for a feature to support that special case&lt;br /&gt;
&lt;br /&gt;
== Modifying existing Packages ==&lt;br /&gt;
&lt;br /&gt;
If you base a new package on an existing non-MeeGo package, make sure you verify its correctness of the package  and the spec file and to understand exactly what has been done to package the software exactly. Do not submit a package without knowing what those strange, but innocent-looking commands do.&lt;br /&gt;
&lt;br /&gt;
In particular, you should&lt;br /&gt;
&lt;br /&gt;
* ensure that original tarballs are self-contained pristine tarballs. The tarball should not contain symlinks that reference outside the tarball root directory&lt;br /&gt;
* verify any sources and patches and remove patches or sources that:&lt;br /&gt;
** are related to platforms we do not support (example: sparc, ia64, ppc, ...)&lt;br /&gt;
** Implement features we do not support (example: selinux)&lt;br /&gt;
** Read every patch and understand what it does, if it is needed, put an explanation in the header justifying why the patch is needed.&lt;br /&gt;
* verify that the license stated in the spec file matches the actual license of the software,&lt;br /&gt;
* skim the summary and description for typos and oddities (see Summary and description ),&lt;br /&gt;
* make sure that the correct build root is used,&lt;br /&gt;
* ensure that macro usage is consistent and that the macros are available in MeeGo (see Macros ). &lt;br /&gt;
&lt;br /&gt;
Keep old changelog entries to credit the original authors. Entries that are several years old or refer to ancient versions of the software may be erased. If you end up doing radical changes and re-write most of the spec file anyway, feel free to start the changelog from scratch. In other words, use your best judgement.&lt;br /&gt;
&lt;br /&gt;
== Changelogs ==&lt;br /&gt;
&lt;br /&gt;
This section describes the MeeGo policy for RPM changelogs. (Original changelogs included in the original source are not affected by this policy.) &lt;br /&gt;
&lt;br /&gt;
Please consider that a &amp;quot;normal end user with some technical skills&amp;quot; should be able to read and understand an RPM changelog. Changelog entries have to be in reverse chronological order: newer change log entries are listed above older entries, with the first entry being the most recent. &lt;br /&gt;
&lt;br /&gt;
Please bear in mind theat MeeGo changelogs will be automatically parsed to prepare distribution release notes and to report on bugs and CVEs and malformed entries may not be read correctly.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* MeeGo uses a separate file for package changes which is similar to a debian changelog file. This file is named as the spec file, but ends in *.changes instead of *.spec &lt;br /&gt;
* Entries in the changes file should have the following structure:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* dow mmm dd yyyy Name Goes Here &amp;lt;your@email.com&amp;gt; - [version]&lt;br /&gt;
- comment&lt;br /&gt;
- comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following exceptions are noted through observation:&lt;br /&gt;
* version is often omitted (such as: alsa-utils 1.0.15-1 -&amp;gt; 1.0.16-1)&lt;br /&gt;
* there are multiple changelog entries per version (such as: alsa-utils 1.0.19)&lt;br /&gt;
* the hyphen between email and version is often omitted (such as: alsa-utils)&lt;br /&gt;
* spaces between name and &amp;lt;email&amp;gt; are omitted (such as: Zhang, Qiang Z&amp;lt;qiang.z.zhang@intel.com&amp;gt; nano)&lt;br /&gt;
* name is sometimes omitted (such as: bitstream-vera-fonts nicolas.mailhot at laposte.net)&lt;br /&gt;
* &amp;lt;email&amp;gt; is sometimes omitted (such as: binutils Jim Kingdon)&lt;br /&gt;
This wide variation in formats makes automation tasks harder than they should be. Please use the correct format.&lt;br /&gt;
&lt;br /&gt;
=== External References ===&lt;br /&gt;
&lt;br /&gt;
Each external reference (bug numbers etc) should be of the form:&lt;br /&gt;
 &amp;quot;(&amp;quot; + external reference code + bug number +&amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently defined:&lt;br /&gt;
* MeeGo Bugs : BMC#&lt;br /&gt;
* MeeGo Features: FEA#&lt;br /&gt;
* Common Vulnerability / Exposure : CVE&lt;br /&gt;
&lt;br /&gt;
==== Bug Numbers in the change log ====&lt;br /&gt;
&lt;br /&gt;
During maintenance of a distribution, every change has to be marked with the correct bug number. Normally this has to be an number from https://bugzilla.meego.com/. Add an entry with bugzilla number and a short description of the bug-summary. For example:&lt;br /&gt;
 - Removed invalid desktop Category &amp;quot;Application&amp;quot; (BMC#4654).&lt;br /&gt;
 - Symlink icon to pixmaps dir (BMC#2108)&lt;br /&gt;
 - Added gnome-ui-properties to control-center (BMC#1960).&lt;br /&gt;
&lt;br /&gt;
New packages related to new features will refer to the corresponding bug number in bugzilla, preceded with an FEA.  For example:&lt;br /&gt;
 - Adding Qt Contacts support FEA#8011&lt;br /&gt;
&lt;br /&gt;
==== CVE numbers in change log ====&lt;br /&gt;
&lt;br /&gt;
As with bug numbers: Add a short description (normally the CVE summary should be enough), the Bugzilla and the CVE number to the changelog entry. Examples:&lt;br /&gt;
 - Add gdk-pixbuf-226710.patch (BMC#226710), and (CVE-2007-0010).&lt;br /&gt;
 - More XPM fixes: (CVE-2005-2975) xpm too many colors DoS (BMC#129642)&lt;br /&gt;
 - fix ~/.dmrc symlink attack (BMC#180704), (CVE-2006-2449)&lt;br /&gt;
&lt;br /&gt;
=== Spec File changes ===&lt;br /&gt;
Be as precise as possible! This is especially important if you remove something from the spec file. &lt;br /&gt;
&lt;br /&gt;
* Removing original source code must be declared in spec file with a comment (&amp;quot;useful for FreeBSD only&amp;quot; for example) - not necessary to repeat the comment in specfile.&lt;br /&gt;
* Extra commands (for example during %install) can be illustrated with a short comment in spec file&lt;br /&gt;
* Adding/Removing packages from Requires/Provides must be described in the changelog&lt;br /&gt;
&lt;br /&gt;
=== Source Code changes ===&lt;br /&gt;
&lt;br /&gt;
Document the most important changes but limit verbosity.&lt;br /&gt;
&lt;br /&gt;
* look into the source changelog and pick up the most important changes for the distribution (changes for other operation systems are not important). What has changed in the new version, usually in the level of detail of a NEWS file, the change log files are usually too long. More than '''10-15 lines''' shouldn't be necessary to describe the most important changes.&lt;br /&gt;
* arrange the original changes behind the version update information. Example:&lt;br /&gt;
  - Update to 1.3.2:&lt;br /&gt;
    + fixes memory leak in import function&lt;br /&gt;
    + new API command: unlock_client()&lt;br /&gt;
    + the following bugs are closed by this new upstream release:&lt;br /&gt;
    ++ ............ [MGN:332]&lt;br /&gt;
    ++ .............[MGN:337]&lt;br /&gt;
  - split of devel package&lt;br /&gt;
* If upstream does not provide a meaningful change log, then only do best effort. Don't waste too much time over it.&lt;br /&gt;
* If the upstream tarball really has not changed except for the version number, just the version number in the change log would be fine. Same goes for packages just containing some graphics or theming (unless upstream already provides something that fits). If the upstream changes just consists of &amp;quot;updated translation&amp;quot; or &amp;quot;several bug fixes&amp;quot; even that can be sufficient for a changelog entry (unless these bug fixes contain something you find worth mentioning).&lt;br /&gt;
&lt;br /&gt;
== Packaging Static Libraries ==&lt;br /&gt;
Packages including libraries should exclude static libs as far as possible (eg by configuring with ''--disable-static'').  Static libraries should only be included in exceptional circumstances.  Applications linking against libraries should as far as possible link against shared libraries not static versions.&lt;br /&gt;
&lt;br /&gt;
Libtool archives, ''foo.la'' files, should not be included. Packages using libtool will install these by default even if you configure with ''--disable-static'', so they may need to be removed before packaging.  Due to bugs in older versions of libtool or bugs in programs  that use it, there are times when it is not always possible to remove *.la files without modifying the program.  In most cases it is fairly easy to work with upstream to fix these issues.  Note that if you are updating a library in a stable release (not devel) and the package already contains *.la files, removing the *.la files should be treated as an API/ABI change -- ie: Removing them changes the interface that the library gives to the rest of the world and should not be undertaken lightly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packaging Static Libraries ===&lt;br /&gt;
* In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.&lt;br /&gt;
&lt;br /&gt;
* We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:&lt;br /&gt;
# '''Static libraries and shared libraries.''' In this case, the static libraries must be placed in a ''*-static'' subpackage. Separating the static libraries from the other development files in ''*-devel'' allow us to track this usage by checking which packages &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries.&lt;br /&gt;
# '''Static libraries only.''' When a package only provides static libraries you can place all the static library files in the ''*-devel'' subpackage.  When doing this you also must have a virtual Provide for the ''*-static'' package:&lt;br /&gt;
&amp;lt;pre&amp;gt;%package devel&lt;br /&gt;
Provides: foo-static = %{version}-%{release}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages which explicitly need to link against the static version must &amp;lt;code&amp;gt;BuildRequire: foo-static&amp;lt;/code&amp;gt;, so that the usage can be tracked.&lt;br /&gt;
&lt;br /&gt;
* If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the ''*-devel'' subpackage. The devel subpackage must have a virtual Provide for the ''*-static'' package, and packages dependent on it must &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Staticly Linking Executables ===&lt;br /&gt;
* Static linkage is a special exception and should be decided on a case-by-case basis.  The packager must provide rationale for linking statically, including precedences where available, to release engineering for approval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Packaging]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Packaging/Guidelines</id>
		<title>Packaging/Guidelines</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Packaging/Guidelines"/>
				<updated>2010-12-10T12:48:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: Remove AF subsystems, rename connectivity -&amp;gt; communications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Packaging Guidelines =&lt;br /&gt;
&lt;br /&gt;
Guidelines below were adapted for MeeGo from Moblin, OpenSUSE, Fedora and other distributions.&lt;br /&gt;
&lt;br /&gt;
== Maintaining a Package ==&lt;br /&gt;
Every package in MeeGo needs a maintainer (AKA owner, bug owner). Any package without an owner will automatically be nominated for deletion from MeeGo. A package maintainer is responsible for making sure that&lt;br /&gt;
* packages are up to date with latest upstream&lt;br /&gt;
* packages consistently build in the MeeGo build system and fix build failures when they occur&lt;br /&gt;
* package meta data in the RPM spec file is accurate&lt;br /&gt;
* the license of the package is correct&lt;br /&gt;
* she/he follow upstream for any critical security issues and fix them ASAP&lt;br /&gt;
* she/he Provides information about major changes to other packagers and maintainer to allow enough time for fixing compatibility issues&lt;br /&gt;
&lt;br /&gt;
Since the data about ownership of packages is not maintained anywhere right now we are starting to use available meta data fields in the build system to track ownership. This will be better integrated and managed at a later point, but to be able to start somewhere MeeGo will use the bugowner key available for every package. We will start adding the metadata about maintainers (bugowners) in the build system and we will have agrace period for this data to be supplied and added to the build system. After the grace period, packages without maintainer will be reviewed and any packages without a maintainer will be nominated for deletion.&lt;br /&gt;
&lt;br /&gt;
To add yourself as a bugowner of a package, please follow the steps below:&lt;br /&gt;
* Update to the most recent osc version (0.129) from the MeeGo tools repository (note: this is essential, since the needed options are not released upstream yet)&lt;br /&gt;
* Identify the packages  of which you are the ultimate maintainer&lt;br /&gt;
* Do the following for every package you maintain in the Trunk:* projects:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
osc reqms --role bugowner &amp;lt;project&amp;gt; &amp;lt;package&amp;gt; -m &amp;quot;I want to own this because I love this package&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Your request will be sent and someone in release engineering will approve it&lt;br /&gt;
&lt;br /&gt;
== Package Naming ==&lt;br /&gt;
* Dash '-' must be used as the delimiter for name parts. &lt;br /&gt;
* Do NOT use an underscore '_', a plus '+', or a period '.' as a delimiter. &lt;br /&gt;
* The spec file should be named using the %{name}.spec scheme which should also correspond to the package name within a project in the build system.&lt;br /&gt;
&lt;br /&gt;
== Version and Release ==&lt;br /&gt;
&lt;br /&gt;
Package Versions look like : X.Y.Z-R.B&lt;br /&gt;
* X.Y.Z is the 'Version' number - determined by the source package.&lt;br /&gt;
* R is the 'Release' number which is automatically incremented by OBS whenever a source/packaging changes (eg a check-in or request acceptance)&lt;br /&gt;
* B is the build number which is incremented when the package is rebuilt due to a dependency change.&lt;br /&gt;
&lt;br /&gt;
=== Version ===&lt;br /&gt;
&lt;br /&gt;
The Version field in the spec file is where you should put the current version of the software being packaged. &lt;br /&gt;
There are four cases where the version contains non-numeric characters:&lt;br /&gt;
&lt;br /&gt;
* Pre-release packages: Packages released as &amp;quot;pre-release&amp;quot; versions, prior to a &amp;quot;final&amp;quot; version. Example tags include &amp;quot;alpha&amp;quot;, &amp;quot;beta&amp;quot;, &amp;quot;rc&amp;quot;, &amp;quot;cvs&amp;quot;, &amp;quot;git&amp;quot;, &amp;quot;svn&amp;quot;, etc... Details can be found below: Non-Numeric Version.&lt;br /&gt;
* Post-release packages: Packages released after a &amp;quot;final&amp;quot; version. These packages contain the same numeric version as the &amp;quot;final&amp;quot; version, but have an additional non-numeric identifier. This mechanism may also be used for packaging only changes to an upstream package.&lt;br /&gt;
* Snapshot packages: Packages built from SCM snapshots. These packages could be either &amp;quot;pre&amp;quot; or &amp;quot;post&amp;quot; release packages. &lt;br /&gt;
&lt;br /&gt;
==== Non-Numeric Version ====&lt;br /&gt;
&lt;br /&gt;
We can use letters and tilde into the version tag. We do not use the Release field for this.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Let's assume the following Qt versions:&lt;br /&gt;
Qt 4.7.0~beta1&lt;br /&gt;
Qt 4.7.0~beta1+git1&lt;br /&gt;
Qt 4.7.0~beta2&lt;br /&gt;
Qt 4.7.0&lt;br /&gt;
&lt;br /&gt;
Version comparison results:&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1 4.7.0~beta1+git1&lt;br /&gt;
0:4.7.0~beta1+git1-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta1+git2 4.7.0~beta2&lt;br /&gt;
0:4.7.0~beta2-None is newer&lt;br /&gt;
&lt;br /&gt;
$ rpmdev-vercmp 4.7.0~beta2 4.7.0&lt;br /&gt;
0:4.7.0-None is newer&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
4.7.0~beta1 &amp;lt; 4.7.0~beta1+git1 &amp;lt; 4.7.0~beta2 &amp;lt; 4.7.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the ~ comparison order is specific to MeeGo rpm (http://rpm.org/ticket/56).&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
&lt;br /&gt;
This field is handled by the build system to be able to manage automated builds. The initial setting in the spec file is used by the build system but in many cases it does not need to be changed.&lt;br /&gt;
&lt;br /&gt;
There is no need for the %{dist} macro in the release field. This is also handled directly by the build system.&lt;br /&gt;
&lt;br /&gt;
The release number is set to zero with any version update. It is increased by one with any change in the package.&lt;br /&gt;
&lt;br /&gt;
We can put letters into the version tag, so we do not use the Release field for this. Details can be found above.&lt;br /&gt;
&lt;br /&gt;
If you build the package outside of the OBS or if you copy a package then you will of course not get the correct Release or Build values.&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
*The ''Packager'' tag should not be used in spec files. The identities of the packagers are evident from the changelog entries. By not using the ''Packager'' tag, you also avoid seeing bad binaries rebuilt by someone else with your name in the header.  See also the '''Maximum RPM definition of the Packager tag''' at [http://www.rpm.org/max-rpm/s1-rpm-inside-tags.html#S3-RPM-INSIDE-PACKAGER-TAG www.rpm.org] .  If you need to include information about the packager in the rpms ''you'' built, use &amp;lt;code&amp;gt;%packager&amp;lt;/code&amp;gt; in your &amp;lt;code&amp;gt;~/.rpmmacros&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
*The ''Vendor'' tag should not be used. It is set automatically by the build system.&lt;br /&gt;
&lt;br /&gt;
*Usually, the ''Pre&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Req'' tag should be replaced by plain ''Requires''.   For more info, see Maximum RPM snapshot's  [http://www.rpm.org/max-rpm-snapshot/s1-rpm-depend-manual-dependencies.html#S3-RPM-DEPEND-FINE-GRAINED fine grained dependencies chapter] .&lt;br /&gt;
* The ''Source'' tag documents where to find the upstream sources for the rpm.  In most cases this should be a complete URL to the upstream tarball.  &lt;br /&gt;
=== Summary Tag ===&lt;br /&gt;
The summary is a single line string describing the package. The maximum length is 80 characters. It should fit all standard situations and not assume any special context. It should be helpful alone, in alphabetically sorted or unsorted lists of some selected packages, and in alphabetically sorted or unsorted lists of all packages.&lt;br /&gt;
&lt;br /&gt;
It should describe the package's main function and point out any special properties of the package to support the user comparing similar packages. For example, the two words &amp;quot;Web Browser&amp;quot; summarize any web browser, but using additional adjectives (like minimalistic, complex, GNOME, KDE, text-based, fast, or author's) helps characterize a specific package.&lt;br /&gt;
&lt;br /&gt;
The RPM spec file contains only the English version to keep the RPM database small.&lt;br /&gt;
&lt;br /&gt;
*The ''Summary'' tag value should not end in a period. If this bothers you from a grammatical point of view, sit down, take a deep breath, and get over it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Group Tag ===&lt;br /&gt;
&lt;br /&gt;
Valid RPM Groups are:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Amusements/Games&lt;br /&gt;
Amusements/Graphics&lt;br /&gt;
Applications/Archiving&lt;br /&gt;
Applications/Communications&lt;br /&gt;
Applications/Databases&lt;br /&gt;
Applications/Editors&lt;br /&gt;
Applications/Emulators&lt;br /&gt;
Applications/Engineering&lt;br /&gt;
Applications/File&lt;br /&gt;
Applications/Internet&lt;br /&gt;
Applications/Multimedia&lt;br /&gt;
Applications/Productivity&lt;br /&gt;
Applications/Publishing&lt;br /&gt;
Applications/System&lt;br /&gt;
Applications/Text&lt;br /&gt;
Development/Debuggers&lt;br /&gt;
Development/Languages&lt;br /&gt;
Development/Libraries&lt;br /&gt;
Development/System&lt;br /&gt;
Development/Tools&lt;br /&gt;
Documentation&lt;br /&gt;
System/Boot&lt;br /&gt;
System/Console&lt;br /&gt;
System/I18n/Chinese&lt;br /&gt;
System/I18n/Japanese&lt;br /&gt;
System/I18n/Korean&lt;br /&gt;
System/Packages&lt;br /&gt;
System/Base&lt;br /&gt;
System/Daemons&lt;br /&gt;
System/Kernel&lt;br /&gt;
System/Libraries&lt;br /&gt;
System/Shells&lt;br /&gt;
System/X11&lt;br /&gt;
System/X11/Fonts&lt;br /&gt;
System/X11/Icons&lt;br /&gt;
System/GUI/XFCE&lt;br /&gt;
System/GUI/Other&lt;br /&gt;
System/GUI/GNOME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Domain/Subsystem based RPM Groups ====&lt;br /&gt;
&lt;br /&gt;
Following the new architecture and the new [http://meego.com/developers/meego-architecture/meego-architecture-domain-view domain view], RPM groups (The Group tag in the RPM) for core packages will be changed to match the domains and any package in the core that is part of one of the domain will have a corresponding group that matches the architecture.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Domain   &lt;br /&gt;
! Subsystem  &lt;br /&gt;
!Groupname&lt;br /&gt;
| Communications   ||  Cellular Adaptation   ||  Communications/Cellular Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Cellular Framework   ||  Communications/Cellular Framework&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Telephony and IM   ||  Communications/Telephony and IM&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Bluetooth   ||  Connectivity/Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  Connectivity Adaptation   ||  Connectivity/Connectivity Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Communications   ||  ConnMan   ||  Connectivity/ConnMan&lt;br /&gt;
|-&lt;br /&gt;
| Data Management   ||  Content Framework   ||  Data Management/Content Framework&lt;br /&gt;
|-&lt;br /&gt;
| Development Platform   ||  Platform SDK   ||  Development Platform/Platform SDK&lt;br /&gt;
|-&lt;br /&gt;
| Essentials   ||  Base Essentials   ||  Essentials/Base Essentials&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Font Management   ||  Graphics/Font Management&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Display and Graphics Adaptation   ||  Graphics/Display and Graphics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Input Adaptation   ||  Graphics/Input Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  Open GL ES   ||  Graphics/Open GL ES&lt;br /&gt;
|-&lt;br /&gt;
| Graphics   ||  X11   ||  Graphics/X11&lt;br /&gt;
|-&lt;br /&gt;
| Kernel   ||  Linux Kernel   ||  Kernel/Linux Kernel&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Framework   ||  Location/Location Framework&lt;br /&gt;
|-&lt;br /&gt;
| Location   ||  Location Adaptation   ||  Location/Location Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Audio Adaptation   ||  Multimedia/Audio Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Camera Adaptation   ||  Multimedia/Camera Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Gstreamer   ||  Multimedia/Gstreamer&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging and Video Adaptation   ||  Multimedia/Imaging and Video Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Imaging Codecs   ||  Multimedia/Imaging Codecs&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  PulseAudio   ||  Multimedia/PulseAudio&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  Sharing   ||  Multimedia/Sharing&lt;br /&gt;
|-&lt;br /&gt;
| Multimedia   ||  UPnP   ||  Multimedia/UPnP&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Backup Framework   ||  Personal Information Management/Backup Framework&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Calendar Engine   ||  Personal Information Management/Calendar Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Contacts Engine   ||  Personal Information Management/Contacts Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Email Engine   ||  Personal Information Management/Email Engine&lt;br /&gt;
|-&lt;br /&gt;
| Personal Information Management   ||  Synchronization Framework   ||  Personal Information Management/Synchronization Framework&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt   ||  Qt/Qt&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt Mobility   ||  Qt/Qt Mobility&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Qt WebKit   ||  Qt/Qt WebKit&lt;br /&gt;
|-&lt;br /&gt;
| Qt   ||  Web Runtime   ||  Qt/Web Runtime&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Accounts   ||  Security/Accounts&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Certificate Manager   ||  Security/Certificate Manager&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Integrity Protection Framework   ||  Security/Integrity Protection Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Access Control Framework   ||  Security/Access Control Framework&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Single Sign-On   ||  Security/Single Sign-On&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  SW Distribution Security   ||  Security/SW Distribution Security&lt;br /&gt;
|-&lt;br /&gt;
| Security   ||  Security Adaptation   ||  Security/Security Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| Software Management   ||  Package Manager   ||  Software Management/Package Manager&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Context Framework   ||  System/Context Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  NGF   ||  System/NGF&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Resource Policy   ||  System/Resource Policy&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Adaptation   ||  System/Sensor Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Sensor Framework   ||  System/Sensor Framework&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Startup Services   ||  System/Startup Services&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  System Control   ||  System/System Control&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Device Mode Adaptation   ||  System/Device Mode Adaptation&lt;br /&gt;
|-&lt;br /&gt;
| System   ||  Vibra and Haptics Adaptation   ||  System/Vibra and Haptics Adaptation&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BuildRoot tag ===&lt;br /&gt;
The ''BuildRoot'' value MUST be below &amp;lt;code&amp;gt;%{_tmppath}/&amp;lt;/code&amp;gt; and MUST contain at least &amp;lt;code&amp;gt;%{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%{version}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The ''recommended'' values for the ''BuildRoot'' tag are (in descending order of preference) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_tmppath}/%{name}-%{version}-%{release}-root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BuildRoot tag can be omitted in packages targeting MeeGo only and is handled directly by rpm in MeeGo, for packages that need to run on other distros with older rpm it should be added for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
=== PreReq ===&lt;br /&gt;
&lt;br /&gt;
Packages should not use the PreReq tag. Once upon a time, in dependency loops PreReq used to &amp;quot;win&amp;quot; over the conventional Requires when RPM determined the installation order in a transaction. This is no longer the case.&lt;br /&gt;
&lt;br /&gt;
=== Explicit Requires ===&lt;br /&gt;
Packages must not contain explicit ''Requires'' on libraries except when absolutely &lt;br /&gt;
necessary. When explicit library ''Requires'' are necessary, there should be a spec file comment justifying it.&lt;br /&gt;
&lt;br /&gt;
We generally rely on rpmbuild to automatically add dependencies on library SONAMEs. &lt;br /&gt;
Modern package management tools are capable of resolving such dependencies to determine &lt;br /&gt;
the required packages. Explicit dependencies on specific package names may aid the &lt;br /&gt;
inexperienced user, who attempts at installing RPM packages manually, however, history &lt;br /&gt;
has shown that such dependencies add confusion when library/files are moved from one &lt;br /&gt;
package to another, when packages get renamed, when one out of multiple alternative &lt;br /&gt;
packages would suffice, and when versioned explicit dependencies become out-of-date and &lt;br /&gt;
inaccurate. Additionally, in some cases, old explicit dependencies on package names &lt;br /&gt;
require unnecessary updates/rebuilds. &lt;br /&gt;
&lt;br /&gt;
Exemplary rationale for a versioned explicit dependency:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # The automatic dependency on libfubar.so.1 is insufficient,&lt;br /&gt;
  # as we strictly need at least the release that fixes two segfaults.&lt;br /&gt;
  Requires: libfubar &amp;gt;= 0:1.2.3-7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packagers should revisit an explicit dependency as appropriate to avoid &lt;br /&gt;
it becoming inaccurate and superfluous.&lt;br /&gt;
&lt;br /&gt;
=== BuildRequires ===&lt;br /&gt;
&lt;br /&gt;
In package development and testing, please verify that your package is not missing any necessary build dependencies. Having proper build requirements saves the time of all developers and testers as well as build systems because they will not need to search for missing build requirements manually. It is also a safety feature that prevents builds with that would not otherwise fail, but would be missing crucial features. For example, a graphical application may exclude PNG support after its '''configure''' script detects that libpng is not installed.&lt;br /&gt;
&lt;br /&gt;
Before adding Build&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;Requires to any package, please be comfortable with [[#Requires|  Requires]] .&lt;br /&gt;
&lt;br /&gt;
=== Patches ===&lt;br /&gt;
Each problem should be solved in a separate patch. To allow easy maintenance of patches, every patch should have a header providing the following information:&lt;br /&gt;
&lt;br /&gt;
* Authors' names&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines/signed-process Signed-off-by] tag&lt;br /&gt;
* Detailed description of the fixed problem&lt;br /&gt;
* URL of the original source of the patch if any&lt;br /&gt;
&lt;br /&gt;
The name of a patch file consists of:&lt;br /&gt;
&lt;br /&gt;
* The name and version of the source tarball from which the patched file is derived&lt;br /&gt;
* Some words that characterize the patch content&lt;br /&gt;
* The filename suffix &amp;lt;code class=&amp;quot;filename&amp;quot;&amp;gt;.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Patches are in the unified format (&amp;lt;span&amp;gt;'''diff -u'''&amp;lt;/span&amp;gt;) and should be applied with 1 strip level in the spec file (&amp;lt;span&amp;gt;'''%patch -p1'''&amp;lt;/span&amp;gt;). The only exceptions are the patches obtained from an another primary source site. The original name, suffix, and format is preserved in this case.&lt;br /&gt;
&lt;br /&gt;
Each patch should be compressed with &amp;lt;span&amp;gt;'''bzip2'''&amp;lt;/span&amp;gt; if its size is greater than 100kB. The macros &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%name&amp;lt;/code&amp;gt; and &amp;lt;code class=&amp;quot;systemitem&amp;quot;&amp;gt;%version&amp;lt;/code&amp;gt; should be used whenever possible.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 Source:   %{name}-%{version}.tar.bz2&lt;br /&gt;
 Patch0:   %{name}-%{version}-autoconf.patch&lt;br /&gt;
 Patch1:   %{name}-%{version}-gcc31.patch&lt;br /&gt;
&lt;br /&gt;
For the patches to be applied, the patches should be mentioned under %setup. For the above example, this could be done as&lt;br /&gt;
&lt;br /&gt;
 %setup -q&lt;br /&gt;
 %patch0 -p1&lt;br /&gt;
 %patch1 -p1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Patches have to be marked as such in the spec file and should be applied using the internal patch routines available in rpm. Use of alternate patch management system not supported by rpm is not allowed.&lt;br /&gt;
&lt;br /&gt;
=== %clean ===&lt;br /&gt;
&lt;br /&gt;
The %clean section is not required for MeeGo 1.1 and above. Each package for MeeGo 1.0 MUST have a %clean section, which contains rm -rf %{buildroot} (or $RPM_BUILD_ROOT).&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Any relevant documentation included in the source distribution should be included in the package. Irrelevant documentation include build instructions, the omnipresent ''INSTALL'' file containing generic build instructions, for example, and documentation for non-Linux systems, e.g. ''README.MSDOS''.  Pay also attention about which subpackage you include documentation in, for example API documentation belongs in the -devel subpackage, not the main one.  Or if there's a lot of documentation, consider putting it into a subpackage.  In this case, it is recommended to use &amp;lt;code&amp;gt;*-doc&amp;lt;/code&amp;gt; as the subpackage name, and &amp;lt;code&amp;gt;Documentation&amp;lt;/code&amp;gt; as the value of the &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Also, if a package includes something as &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, it must not affect the runtime of the application. To summarize: If it is in &amp;lt;code&amp;gt;%doc&amp;lt;/code&amp;gt;, the program must run properly if it is not present.&lt;br /&gt;
&lt;br /&gt;
== Devel Packages ==&lt;br /&gt;
If the software being packaged contains files intended solely for development, those files should be put in a -devel subpackage. The following are examples of file types which should be in -devel:&lt;br /&gt;
* Header files (such as .h files)&lt;br /&gt;
* Unversioned shared libraries (such as libfoo.so). Versioned shared libraries (such as libfoo.so.3, libfoo.so.3.0.0) should not be in -devel.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is if the file is used for development and not needed for the base package to run properly, it should go in -devel.&lt;br /&gt;
&lt;br /&gt;
=== Requiring Base Package ===&lt;br /&gt;
Devel packages must require the base package using a fully versioned dependency: &amp;lt;code&amp;gt;Requires: %{name} = %{version}-%{release}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Usually, subpackages other than -devel should also require the base package using a fully versioned dependency.&lt;br /&gt;
&lt;br /&gt;
=== Pkgconfig Files ===&lt;br /&gt;
The placement of pkgconfig(.pc) files depends on their usecase. Since they are almost always used for development purposes, they should be placed in a -devel package.&lt;br /&gt;
A reasonable exception is when the main package itself is a development tool not installed in a user runtime, such as gcc or gdb.&lt;br /&gt;
&lt;br /&gt;
== Test Packages ==&lt;br /&gt;
Tests should be included in -test subpackage or separate package according to the following guidelines.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Test_Packaging Test Packaging Guidelines]&lt;br /&gt;
&lt;br /&gt;
== Shared Libraries ==&lt;br /&gt;
Whenever possible (and feasible), MeeGo Packages containing libraries should build them as shared libraries. In addition, every binary RPM package which contains shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If the package has multiple subpackages with libraries, each subpackage should also have a &amp;lt;code&amp;gt;%post/%postun&amp;lt;/code&amp;gt; section that calls &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt;. An example of the correct syntax for this is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post -p /sbin/ldconfig&lt;br /&gt;
&lt;br /&gt;
%postun -p /sbin/ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that this specific syntax only works if &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; is the only call in &amp;lt;code&amp;gt;%post&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%postun&amp;lt;/code&amp;gt;. If you have additional commands to run during the scriptlet, call &amp;lt;code&amp;gt;/sbin/ldconfig&amp;lt;/code&amp;gt; at the beginning of the scriptlet, like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%post&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --add&lt;br /&gt;
&lt;br /&gt;
%postun&lt;br /&gt;
/sbin/ldconfig&lt;br /&gt;
/usr/bin/foo --remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration files ==&lt;br /&gt;
&lt;br /&gt;
Configuration files must be marked as such in packages.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, use &amp;lt;code&amp;gt;%config(noreplace)&amp;lt;/code&amp;gt; instead of plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; unless your best, educated guess is that doing so will break things.  In other words, think hard before overwriting local changes in configuration files on package upgrades.  An example case when /not/ to use &amp;lt;code&amp;gt;noreplace&amp;lt;/code&amp;gt; is when a package's configuration file changes so that the new package revision wouldn't work with the config file from the previous package revision.  Whenever plain &amp;lt;code&amp;gt;%config&amp;lt;/code&amp;gt; is used, add a brief comment to the specfile explaining why.&lt;br /&gt;
&lt;br /&gt;
Don't use %config or %config(noreplace) under /usr. /usr is deemed to not contain configuration files in MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Initscripts ==&lt;br /&gt;
&lt;br /&gt;
Currently, only SystemV-style initscripts are supported in MeeGo. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Desktop files ==&lt;br /&gt;
&lt;br /&gt;
If a package contains a GUI application, then it needs to also include a properly installed .desktop file.  For the purposes of these guidelines, a GUI application is defined as any application which draws an X window and runs from within that window.  Installed .desktop files MUST follow the [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html desktop-entry-spec]  , paying particular attention to validating correct usage of Name, GenericName, [http://standards.freedesktop.org/menu-spec/latest/apa.html Categories]  ,&lt;br /&gt;
[http://www.freedesktop.org/Standards/startup-notification-spec StartupNotify]&lt;br /&gt;
entries.&lt;br /&gt;
&lt;br /&gt;
=== Icon tag in Desktop Files ===&lt;br /&gt;
The icon tag can be specified in two ways:&lt;br /&gt;
&lt;br /&gt;
* Full path to specific icon file:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=/usr/share/pixmaps/comical.png &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Short name without file extension:&lt;br /&gt;
&amp;lt;code&amp;gt; Icon=comical &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The short name without file extension is preferred, because it allows for icon theming (it assumes .png by default, then tries .svg and finally .xpm), but either method is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== .desktop file creation ===&lt;br /&gt;
If the package doesn't already include and install its own .desktop file, you need to make your own. You can do this by including a .desktop file you create as a Source: (such as Source3: %{name}.desktop) or generating it in the spec file. Here are the contents of a sample .desktop file (comical.desktop): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Name=Comical&lt;br /&gt;
GenericName=Comic Archive Reader&lt;br /&gt;
Comment=Open .cbr &amp;amp; .cbz files&lt;br /&gt;
Exec=comical&lt;br /&gt;
Icon=comical&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Graphics;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== desktop-file-install usage ===&lt;br /&gt;
It is not simply enough to just include the .desktop file in the package, one MUST run &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; OR &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;%install&amp;lt;/code&amp;gt; (and have &amp;lt;code&amp;gt;BuildRequires: desktop-file-utils&amp;lt;/code&amp;gt;), to help ensure .desktop file safety and spec-compliance. &amp;lt;code&amp;gt;desktop-file-install&amp;lt;/code&amp;gt; MUST be used if the package does not install the file or there are changes desired to the .desktop file (such as add/removing categories, etc). &amp;lt;code&amp;gt;desktop-file-validate&amp;lt;/code&amp;gt; MAY be used instead if the .desktop file's content/location does not need modification.  Here are some examples of&lt;br /&gt;
usage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications         \&lt;br /&gt;
%{SOURCE3}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-install                                    \&lt;br /&gt;
--add-category=&amp;quot;AudioVideo&amp;quot;                             \&lt;br /&gt;
--delete-original                                       \&lt;br /&gt;
--dir=%{buildroot}%{_datadir}/applications              \&lt;br /&gt;
%{buildroot}/%{_datadir}/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
desktop-file-validate %{buildroot}/%{_datadir}/applications/foo.desktop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
=== Using %{buildroot} and %{optflags} vs $RPM_BUILD_ROOT and $RPM_OPT_FLAGS ===&lt;br /&gt;
There are two styles of defining the rpm Build Root and Optimization Flags in a spec file:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ||macro style ||  variable style&lt;br /&gt;
|-&lt;br /&gt;
|Build Root||%{buildroot}||$RPM_BUILD_ROOT&lt;br /&gt;
|-&lt;br /&gt;
|Opt. Flags||%{optflags}||$RPM_OPT_FLAGS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is very little value in choosing one style over the other, since they will resolve to the same values in all scenarios. You should pick a style and use it consistently throughout your packaging.&lt;br /&gt;
&lt;br /&gt;
Mixing the two styles, while valid, is bad from a QA and usability point of view, and should not be done in MeeGo packages.&lt;br /&gt;
&lt;br /&gt;
== Handling Locale Files ==&lt;br /&gt;
&lt;br /&gt;
If the package includes translations, add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BuildRequires: gettext&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you don't, your package could fail to generate translation files in the buildroot.&lt;br /&gt;
&lt;br /&gt;
MeeGo includes an rpm macro called &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is usually:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In some cases, the application may use a different &amp;quot;name&amp;quot; for its locales. You may have to look at the locale files and see what they are named. If they are named &amp;lt;code&amp;gt;myapp.mo&amp;lt;/code&amp;gt;, then you will need to pass &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;%{name&amp;lt;/code&amp;gt;}.&lt;br /&gt;
After &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; macro. Usually, it will be named &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt;. You should then use this file in the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; list to include the locales detected by &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;. To do this, you should include it with the -f parameter to &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are already using the -f parameter for the &amp;lt;code&amp;gt;%files&amp;lt;/code&amp;gt; section where the locales should live, just append the contents of &amp;lt;code&amp;gt;%{name}.lang&amp;lt;/code&amp;gt; to the end of the file that you are already using with -f. (Note that only one file may be used with &amp;lt;code&amp;gt;%files -f&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Here is an example of proper usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt;, in &amp;lt;code&amp;gt;foo.spec&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
%prep&lt;br /&gt;
%setup -q&lt;br /&gt;
&lt;br /&gt;
%build&lt;br /&gt;
%configure --with-cheese&lt;br /&gt;
make %{?_smp_mflags}&lt;br /&gt;
&lt;br /&gt;
%install&lt;br /&gt;
make DESTDIR=%{buildroot} install&lt;br /&gt;
%find_lang %{name}&lt;br /&gt;
&lt;br /&gt;
%clean&lt;br /&gt;
rm -rf %{buildroot}&lt;br /&gt;
&lt;br /&gt;
%files -f %{name}.lang&lt;br /&gt;
%defattr(-,root,root,-)&lt;br /&gt;
%doc LICENSE README&lt;br /&gt;
%{_bindir}/foobar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Why do we need to use %find_lang? ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; helps keep the spec file simple, and helps avoid several other packaging mistakes.&lt;br /&gt;
&lt;br /&gt;
* Packages that use &amp;lt;code&amp;gt;%{_datadir}/*&amp;lt;/code&amp;gt; to grab all the locale files in one line also grab ownership of the locale directories, which is not permitted.&lt;br /&gt;
* Most packages that have locales have lots of locales. Using &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; is much easier in the spec file than having to do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%{_datadir}/locale/ar/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/be/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/cs/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/de/LC_MESSAGES/%{name}.mo&lt;br /&gt;
%{_datadir}/locale/es/LC_MESSAGES/%{name}.mo&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* As new locale files appear in later package revisions, &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; will automatically include them when it is run, preventing you from having to update the spec any more than is necessary.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that usage of &amp;lt;code&amp;gt;%find_lang&amp;lt;/code&amp;gt; in packages containing locales is a MUST.&lt;br /&gt;
&lt;br /&gt;
== Scriptlets ==&lt;br /&gt;
Great care should be taken when using scriptlets in MeeGo packages. If scriptlets are used, those scriptlets must be sane. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scriptlets requirements ===&lt;br /&gt;
Do not use the &amp;lt;code&amp;gt;Requires(pre,post)&amp;lt;/code&amp;gt; style notation for scriptlet dependencies, because of two bugs in RPM. Instead, they should be split like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Requires(pre): ...&lt;br /&gt;
Requires(post): ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more information, see [http://www.redhat.com/archives/fedora-devel-list/2004-April/msg00674.html www.redhat.com] .&lt;br /&gt;
&lt;br /&gt;
=== Running scriptlets only in certain situations ===&lt;br /&gt;
When the rpm command executes the scriptlets in a package it indicates if the action preformed is an install, erase, upgrade or reinstall by passing an integer argument to the script in question according to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          install   erase   upgrade  reinstall&lt;br /&gt;
%pre         1        -         2         2&lt;br /&gt;
%post        1        -         2         2&lt;br /&gt;
%preun       -        0         1         -&lt;br /&gt;
%postun      -        0         1         -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that for example a package that installs an init script with the &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; command should uninstall it only on erase and not upgrade with the following snippet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%preun&lt;br /&gt;
if [ $1 -eq 0 ] ; then&lt;br /&gt;
/sbin/chkconfig --del %{name}&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also &amp;lt;code&amp;gt;/usr/share/doc/rpm-*/triggers&amp;lt;/code&amp;gt;, which gives a more formal, generalized definition about the integer value(s) passed to various scripts.&lt;br /&gt;
&lt;br /&gt;
=== Scriplets are only allowed to write in certain directories ===&lt;br /&gt;
Build scripts of packages (%prep, %build, %install, %check and %clean) may only alter files (create, modify, delete) under %{buildroot}, %{_builddir} and valid temporary locations like /tmp, /var/tmp (or $TMPDIR or %{_tmppath} as set by the rpmbuild process) according to the following matrix&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|         || /tmp, /var/tmp, $TMPDIR, %{_tmppath} || %{_builddir} || %{buildroot}&lt;br /&gt;
|-&lt;br /&gt;
|%prep    || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%build   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%install || yes                                  || yes          || yes&lt;br /&gt;
|-&lt;br /&gt;
|%check   || yes                                  || yes          || no&lt;br /&gt;
|-&lt;br /&gt;
|%clean   || yes                                  || yes          || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Further clarification: That should hold true irrespective of the builder's uid.&lt;br /&gt;
&lt;br /&gt;
== Use of Epochs ==&lt;br /&gt;
The Epoch tag in RPM is to be used only as a last resort, and should be avoided whenever possible. However, it is sometimes necessary to use an Epoch to handle upstream versioning changes or to ease transition from third party repositories. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a package from scratch ==&lt;br /&gt;
&lt;br /&gt;
See [[Spectacle]]&lt;br /&gt;
&lt;br /&gt;
Spectacle is a great tool for straightforward packages, and we have many of those, hundreds, many of those packages already have been using spectacle happily for a while now. Generally, the 80/20 rule applies here, almost 80% of packages in MeeGo can be converted to this format, probably around 20% will need to stay as is for various reasons.&lt;br /&gt;
&lt;br /&gt;
Spectacle in general helps  a lot when you have a package that does:&lt;br /&gt;
* configure&lt;br /&gt;
* make&lt;br /&gt;
* make install&lt;br /&gt;
&lt;br /&gt;
and especially useful when for example you have to manage many build dependencies and patches or for common packaging of perl/python/X packages that usually follows the same packaging work flow. We have plans to add lots of nice features to make packaging easier and more fun with spectacle.&lt;br /&gt;
&lt;br /&gt;
While spectacle has many advanced options to cover all kind of corner cases, it should not be used for complex packages that would require lots of customization, especially now that we support multiple architectures and where we need to apply code and custom scripts to support different scenarios.&lt;br /&gt;
&lt;br /&gt;
Spectacle provides scripts to convert spec files to spectacle, those try to do their best but you SHOULD never just take the output as is and rely on the script, a review of the output is necessary, otherwise you might end up with lots of duplication in the spec file. This is the most common mistake, developers are relying on the output of the conversion script, basically picking some spec file from another distro and converting it. This can lead to major disasters in some cases.&lt;br /&gt;
&lt;br /&gt;
So to summarize:&lt;br /&gt;
* It is NOT mandatory to use spectacle&lt;br /&gt;
* If you try to convert and find yourself spending more than a few minutes on a package, then probably there is something wrong and you should not be using that or you should RTFM.&lt;br /&gt;
* Use it with care, especially when you first import the data from existing spec files or when you first create your YAML file&lt;br /&gt;
* Your distro maintainer might send you a note that certain packages you are maintaining could be converted to spectacle easily, but she/he should not reject your package because it does not use spectacle.&lt;br /&gt;
* If you find yourself forced to edit the spec file manually for some reason, then either:&lt;br /&gt;
** your package is not suitable to be used with spectacle&lt;br /&gt;
** or you might want to ask for a feature to support that special case&lt;br /&gt;
&lt;br /&gt;
== Modifying existing Packages ==&lt;br /&gt;
&lt;br /&gt;
If you base a new package on an existing non-MeeGo package, make sure you verify its correctness of the package  and the spec file and to understand exactly what has been done to package the software exactly. Do not submit a package without knowing what those strange, but innocent-looking commands do.&lt;br /&gt;
&lt;br /&gt;
In particular, you should&lt;br /&gt;
&lt;br /&gt;
* ensure that original tarballs are self-contained pristine tarballs. The tarball should not contain symlinks that reference outside the tarball root directory&lt;br /&gt;
* verify any sources and patches and remove patches or sources that:&lt;br /&gt;
** are related to platforms we do not support (example: sparc, ia64, ppc, ...)&lt;br /&gt;
** Implement features we do not support (example: selinux)&lt;br /&gt;
** Read every patch and understand what it does, if it is needed, put an explanation in the header justifying why the patch is needed.&lt;br /&gt;
* verify that the license stated in the spec file matches the actual license of the software,&lt;br /&gt;
* skim the summary and description for typos and oddities (see Summary and description ),&lt;br /&gt;
* make sure that the correct build root is used,&lt;br /&gt;
* ensure that macro usage is consistent and that the macros are available in MeeGo (see Macros ). &lt;br /&gt;
&lt;br /&gt;
Keep old changelog entries to credit the original authors. Entries that are several years old or refer to ancient versions of the software may be erased. If you end up doing radical changes and re-write most of the spec file anyway, feel free to start the changelog from scratch. In other words, use your best judgement.&lt;br /&gt;
&lt;br /&gt;
== Changelogs ==&lt;br /&gt;
&lt;br /&gt;
This section describes the MeeGo policy for RPM changelogs. (Original changelogs included in the original source are not affected by this policy.) &lt;br /&gt;
&lt;br /&gt;
Please consider that a &amp;quot;normal end user with some technical skills&amp;quot; should be able to read and understand an RPM changelog. Changelog entries have to be in reverse chronological order: newer change log entries are listed above older entries, with the first entry being the most recent. &lt;br /&gt;
&lt;br /&gt;
Please bear in mind theat MeeGo changelogs will be automatically parsed to prepare distribution release notes and to report on bugs and CVEs and malformed entries may not be read correctly.&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* MeeGo uses a separate file for package changes which is similar to a debian changelog file. This file is named as the spec file, but ends in *.changes instead of *.spec &lt;br /&gt;
* Entries in the changes file should have the following structure:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* dow mmm dd yyyy Name Goes Here &amp;lt;your@email.com&amp;gt; - [version]&lt;br /&gt;
- comment&lt;br /&gt;
- comment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following exceptions are noted through observation:&lt;br /&gt;
* version is often omitted (such as: alsa-utils 1.0.15-1 -&amp;gt; 1.0.16-1)&lt;br /&gt;
* there are multiple changelog entries per version (such as: alsa-utils 1.0.19)&lt;br /&gt;
* the hyphen between email and version is often omitted (such as: alsa-utils)&lt;br /&gt;
* spaces between name and &amp;lt;email&amp;gt; are omitted (such as: Zhang, Qiang Z&amp;lt;qiang.z.zhang@intel.com&amp;gt; nano)&lt;br /&gt;
* name is sometimes omitted (such as: bitstream-vera-fonts nicolas.mailhot at laposte.net)&lt;br /&gt;
* &amp;lt;email&amp;gt; is sometimes omitted (such as: binutils Jim Kingdon)&lt;br /&gt;
This wide variation in formats makes automation tasks harder than they should be. Please use the correct format.&lt;br /&gt;
&lt;br /&gt;
=== External References ===&lt;br /&gt;
&lt;br /&gt;
Each external reference (bug numbers etc) should be of the form:&lt;br /&gt;
 &amp;quot;(&amp;quot; + external reference code + bug number +&amp;quot;)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Currently defined:&lt;br /&gt;
* MeeGo Bugs : BMC#&lt;br /&gt;
* MeeGo Features: FEA#&lt;br /&gt;
* Common Vulnerability / Exposure : CVE&lt;br /&gt;
&lt;br /&gt;
==== Bug Numbers in the change log ====&lt;br /&gt;
&lt;br /&gt;
During maintenance of a distribution, every change has to be marked with the correct bug number. Normally this has to be an number from https://bugzilla.meego.com/. Add an entry with bugzilla number and a short description of the bug-summary. For example:&lt;br /&gt;
 - Removed invalid desktop Category &amp;quot;Application&amp;quot; (BMC#4654).&lt;br /&gt;
 - Symlink icon to pixmaps dir (BMC#2108)&lt;br /&gt;
 - Added gnome-ui-properties to control-center (BMC#1960).&lt;br /&gt;
&lt;br /&gt;
New packages related to new features will refer to the corresponding bug number in bugzilla, preceded with an FEA.  For example:&lt;br /&gt;
 - Adding Qt Contacts support FEA#8011&lt;br /&gt;
&lt;br /&gt;
==== CVE numbers in change log ====&lt;br /&gt;
&lt;br /&gt;
As with bug numbers: Add a short description (normally the CVE summary should be enough), the Bugzilla and the CVE number to the changelog entry. Examples:&lt;br /&gt;
 - Add gdk-pixbuf-226710.patch (BMC#226710), and (CVE-2007-0010).&lt;br /&gt;
 - More XPM fixes: (CVE-2005-2975) xpm too many colors DoS (BMC#129642)&lt;br /&gt;
 - fix ~/.dmrc symlink attack (BMC#180704), (CVE-2006-2449)&lt;br /&gt;
&lt;br /&gt;
=== Spec File changes ===&lt;br /&gt;
Be as precise as possible! This is especially important if you remove something from the spec file. &lt;br /&gt;
&lt;br /&gt;
* Removing original source code must be declared in spec file with a comment (&amp;quot;useful for FreeBSD only&amp;quot; for example) - not necessary to repeat the comment in specfile.&lt;br /&gt;
* Extra commands (for example during %install) can be illustrated with a short comment in spec file&lt;br /&gt;
* Adding/Removing packages from Requires/Provides must be described in the changelog&lt;br /&gt;
&lt;br /&gt;
=== Source Code changes ===&lt;br /&gt;
&lt;br /&gt;
Document the most important changes but limit verbosity.&lt;br /&gt;
&lt;br /&gt;
* look into the source changelog and pick up the most important changes for the distribution (changes for other operation systems are not important). What has changed in the new version, usually in the level of detail of a NEWS file, the change log files are usually too long. More than '''10-15 lines''' shouldn't be necessary to describe the most important changes.&lt;br /&gt;
* arrange the original changes behind the version update information. Example:&lt;br /&gt;
  - Update to 1.3.2:&lt;br /&gt;
    + fixes memory leak in import function&lt;br /&gt;
    + new API command: unlock_client()&lt;br /&gt;
    + the following bugs are closed by this new upstream release:&lt;br /&gt;
    ++ ............ [MGN:332]&lt;br /&gt;
    ++ .............[MGN:337]&lt;br /&gt;
  - split of devel package&lt;br /&gt;
* If upstream does not provide a meaningful change log, then only do best effort. Don't waste too much time over it.&lt;br /&gt;
* If the upstream tarball really has not changed except for the version number, just the version number in the change log would be fine. Same goes for packages just containing some graphics or theming (unless upstream already provides something that fits). If the upstream changes just consists of &amp;quot;updated translation&amp;quot; or &amp;quot;several bug fixes&amp;quot; even that can be sufficient for a changelog entry (unless these bug fixes contain something you find worth mentioning).&lt;br /&gt;
&lt;br /&gt;
== Packaging Static Libraries ==&lt;br /&gt;
Packages including libraries should exclude static libs as far as possible (eg by configuring with ''--disable-static'').  Static libraries should only be included in exceptional circumstances.  Applications linking against libraries should as far as possible link against shared libraries not static versions.&lt;br /&gt;
&lt;br /&gt;
Libtool archives, ''foo.la'' files, should not be included. Packages using libtool will install these by default even if you configure with ''--disable-static'', so they may need to be removed before packaging.  Due to bugs in older versions of libtool or bugs in programs  that use it, there are times when it is not always possible to remove *.la files without modifying the program.  In most cases it is fairly easy to work with upstream to fix these issues.  Note that if you are updating a library in a stable release (not devel) and the package already contains *.la files, removing the *.la files should be treated as an API/ABI change -- ie: Removing them changes the interface that the library gives to the rest of the world and should not be undertaken lightly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packaging Static Libraries ===&lt;br /&gt;
* In general, packagers are strongly encouraged not to ship static libs unless a compelling reason exists.&lt;br /&gt;
&lt;br /&gt;
* We want to be able to track which packages are using static libraries (so we can find which packages need to be rebuilt if a security flaw in a static library is fixed, for instance). There are two scenarios in which static libraries are packaged:&lt;br /&gt;
# '''Static libraries and shared libraries.''' In this case, the static libraries must be placed in a ''*-static'' subpackage. Separating the static libraries from the other development files in ''*-devel'' allow us to track this usage by checking which packages &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package. The intent is that whenever possible, packages will move away from using these static libraries, to the shared libraries.&lt;br /&gt;
# '''Static libraries only.''' When a package only provides static libraries you can place all the static library files in the ''*-devel'' subpackage.  When doing this you also must have a virtual Provide for the ''*-static'' package:&lt;br /&gt;
&amp;lt;pre&amp;gt;%package devel&lt;br /&gt;
Provides: foo-static = %{version}-%{release}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Packages which explicitly need to link against the static version must &amp;lt;code&amp;gt;BuildRequire: foo-static&amp;lt;/code&amp;gt;, so that the usage can be tracked.&lt;br /&gt;
&lt;br /&gt;
* If (and only if) a package has shared libraries which require static libraries to be functional, the static libraries can be included in the ''*-devel'' subpackage. The devel subpackage must have a virtual Provide for the ''*-static'' package, and packages dependent on it must &amp;lt;code&amp;gt;BuildRequire&amp;lt;/code&amp;gt; the ''*-static'' package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Staticly Linking Executables ===&lt;br /&gt;
* Static linkage is a special exception and should be decided on a case-by-case basis.  The packager must provide rationale for linking statically, including precedences where available, to release engineering for approval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Packaging]]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/JoelRind</id>
		<title>JoelRind</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/JoelRind"/>
				<updated>2010-11-02T10:51:36Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* MeeGo 1.2 Key Contacts: Fix Mikko's email  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== MeeGo Feature Request Status ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Status / Product&lt;br /&gt;
! Core OS&lt;br /&gt;
! Handset&lt;br /&gt;
! IVI&lt;br /&gt;
! SDK&lt;br /&gt;
! Netbook &lt;br /&gt;
! TV&lt;br /&gt;
! Tablet&lt;br /&gt;
! TOTAL&lt;br /&gt;
 |- &lt;br /&gt;
|NEW &lt;br /&gt;
 |55&lt;br /&gt;
 |130&lt;br /&gt;
 |10&lt;br /&gt;
 |133&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |328&lt;br /&gt;
 |-&lt;br /&gt;
|INDEFINITION Release=1.2&lt;br /&gt;
 |96&lt;br /&gt;
 |30&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |3&lt;br /&gt;
 |0&lt;br /&gt;
 |129&lt;br /&gt;
|-&lt;br /&gt;
|ACCEPTED with NO Target Build set&lt;br /&gt;
 |79&lt;br /&gt;
 |113&lt;br /&gt;
 |0&lt;br /&gt;
 |7&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |199&lt;br /&gt;
|-&lt;br /&gt;
|ACCEPTED with Target Build set&lt;br /&gt;
 |197&lt;br /&gt;
 |29&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |226&lt;br /&gt;
|-&lt;br /&gt;
|INDEFINITION Release unspecified&lt;br /&gt;
 |210&lt;br /&gt;
 |9&lt;br /&gt;
 |15&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |5&lt;br /&gt;
 |0&lt;br /&gt;
 |239&lt;br /&gt;
|-&lt;br /&gt;
|RESOLVED&lt;br /&gt;
 |563&lt;br /&gt;
 |299&lt;br /&gt;
 |2&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |0&lt;br /&gt;
 |864&lt;br /&gt;
|-&lt;br /&gt;
|TOTAL&lt;br /&gt;
 |1200&lt;br /&gt;
 |610&lt;br /&gt;
 |27&lt;br /&gt;
 |140&lt;br /&gt;
 |0&lt;br /&gt;
 |8&lt;br /&gt;
 |0&lt;br /&gt;
 |1985&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features sorted by status and owner===&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;version=unspecified&amp;amp;version=1.2&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=NEW&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=short_desc&amp;amp;type0-0-0=notsubstring&amp;amp;value0-0-0=%5BMASTER%5D NEW by Owner Report]&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;version=1.2&amp;amp;version=1.2&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=INDEFINITION&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=short_desc&amp;amp;type0-0-0=notsubstring&amp;amp;value0-0-0=%5BMASTER%5D INDEFINITION for Release 1.2 by Owner Report]&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;version=1.2&amp;amp;version=unspecified&amp;amp;version=1.2&amp;amp;target_milestone=---&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=ACCEPTED&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=short_desc&amp;amp;type0-0-0=notsubstring&amp;amp;value0-0-0=%5BMASTER%5D ACCEPTED in 1.2 with NO TB by Owner Report]&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;version=1.2&amp;amp;version=1.2&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=ACCEPTED&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=target_milestone&amp;amp;type0-0-0=notsubstring&amp;amp;value0-0-0=---&amp;amp;field0-1-0=short_desc&amp;amp;type0-1-0=notsubstring&amp;amp;value0-1-0=%5BMASTER%5D ACCEPTED in 1.2 with TB by Owner Report]&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;version=unspecified&amp;amp;target_milestone=---&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=INDEFINITION&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=short_desc&amp;amp;type0-0-0=notsubstring&amp;amp;value0-0-0=%5BMASTER%5D INDEFINITION Release &amp;quot;unspecified&amp;quot; by Owner Report ]&lt;br /&gt;
&lt;br /&gt;
[http://bugs.meego.com/report.cgi?x_axis_field=product&amp;amp;y_axis_field=assigned_to&amp;amp;z_axis_field=&amp;amp;query_format=report-table&amp;amp;short_desc_type=allwordssubstr&amp;amp;short_desc=&amp;amp;classification=MeeGo+Features&amp;amp;product=MeeGo+Connected+TV+Features&amp;amp;product=MeeGo+Core+OS+Features&amp;amp;product=MeeGo+Handset+Features&amp;amp;product=MeeGo+IVI+Features&amp;amp;product=MeeGo+Netbook+Features&amp;amp;product=MeeGo+SDK+features&amp;amp;product=MeeGo+Tablet+Features&amp;amp;longdesc_type=allwordssubstr&amp;amp;longdesc=&amp;amp;bug_file_loc_type=allwordssubstr&amp;amp;bug_file_loc=&amp;amp;deadlinefrom=&amp;amp;deadlineto=&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=RELEASED&amp;amp;bug_status=VERIFIED&amp;amp;bug_status=CLOSED&amp;amp;emailassigned_to1=1&amp;amp;emailtype1=substring&amp;amp;email1=&amp;amp;emailassigned_to2=1&amp;amp;emailreporter2=1&amp;amp;emailqa_contact2=1&amp;amp;emailcc2=1&amp;amp;emailtype2=substring&amp;amp;email2=&amp;amp;bugidtype=include&amp;amp;bug_id=&amp;amp;votes=&amp;amp;chfieldfrom=&amp;amp;chfieldto=Now&amp;amp;chfieldvalue=&amp;amp;format=table&amp;amp;action=wrap&amp;amp;field0-0-0=noop&amp;amp;type0-0-0=noop&amp;amp;value0-0-0= RESOLVED ]&lt;br /&gt;
&lt;br /&gt;
===MeeGo 1.2 Requirements process trend indicators===&lt;br /&gt;
&lt;br /&gt;
'''MeeGo 1.2 Core'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Date / Status&lt;br /&gt;
! New&lt;br /&gt;
! Indef / 1.2&lt;br /&gt;
! Accepted - No TB&lt;br /&gt;
! Accepted w/TB&lt;br /&gt;
! Indef/unspecified&lt;br /&gt;
! Resolved&lt;br /&gt;
! TOTAL&lt;br /&gt;
 |- &lt;br /&gt;
 |10/22/2010&lt;br /&gt;
 |113&lt;br /&gt;
 |235&lt;br /&gt;
 |134&lt;br /&gt;
 |160&lt;br /&gt;
 |131&lt;br /&gt;
 |477&lt;br /&gt;
 |-&lt;br /&gt;
 |10/25/2010&lt;br /&gt;
 |101&lt;br /&gt;
 |150&lt;br /&gt;
 |134&lt;br /&gt;
 |164&lt;br /&gt;
 |183&lt;br /&gt;
 |480&lt;br /&gt;
|-&lt;br /&gt;
 |10/26/2010&lt;br /&gt;
 |78&lt;br /&gt;
 |105&lt;br /&gt;
 |144&lt;br /&gt;
 |162&lt;br /&gt;
 |195&lt;br /&gt;
 |493&lt;br /&gt;
|-&lt;br /&gt;
 |10/27/2010&lt;br /&gt;
 |28&lt;br /&gt;
 |96&lt;br /&gt;
 |112&lt;br /&gt;
 |161&lt;br /&gt;
 |216&lt;br /&gt;
 |568&lt;br /&gt;
|-&lt;br /&gt;
 |10/28/2010&lt;br /&gt;
 |28&lt;br /&gt;
 |94&lt;br /&gt;
 |89&lt;br /&gt;
 |184&lt;br /&gt;
 |217&lt;br /&gt;
 |564&lt;br /&gt;
|-&lt;br /&gt;
 |10/29/2010&lt;br /&gt;
 |28&lt;br /&gt;
 |94&lt;br /&gt;
 |89&lt;br /&gt;
 |184&lt;br /&gt;
 |218&lt;br /&gt;
 |563&lt;br /&gt;
|-&lt;br /&gt;
 |11/1/2010&lt;br /&gt;
 |55&lt;br /&gt;
 |96&lt;br /&gt;
 |79&lt;br /&gt;
 |197&lt;br /&gt;
 |210&lt;br /&gt;
 |563&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''MeeGo 1.2 Handset&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Date / Status&lt;br /&gt;
! New&lt;br /&gt;
! Indef / 1.2&lt;br /&gt;
! Accepted - No TB&lt;br /&gt;
! Accepted w/TB&lt;br /&gt;
! Indef/unspecified&lt;br /&gt;
! Resolved&lt;br /&gt;
! TOTAL&lt;br /&gt;
 |- &lt;br /&gt;
 |10/25/2010&lt;br /&gt;
 |95&lt;br /&gt;
 |15&lt;br /&gt;
 |92&lt;br /&gt;
 |8&lt;br /&gt;
 |6&lt;br /&gt;
 |282&lt;br /&gt;
|-&lt;br /&gt;
 |10/26/2010&lt;br /&gt;
 |95&lt;br /&gt;
 |19&lt;br /&gt;
 |94&lt;br /&gt;
 |6&lt;br /&gt;
 |8&lt;br /&gt;
 |289&lt;br /&gt;
|-&lt;br /&gt;
 |10/27/2010&lt;br /&gt;
 |96&lt;br /&gt;
 |29&lt;br /&gt;
 |135&lt;br /&gt;
 |4&lt;br /&gt;
 |8&lt;br /&gt;
 |296&lt;br /&gt;
|-&lt;br /&gt;
 |10/28/2010&lt;br /&gt;
 |96&lt;br /&gt;
 |32&lt;br /&gt;
 |121&lt;br /&gt;
 |18&lt;br /&gt;
 |8&lt;br /&gt;
 |300&lt;br /&gt;
|-&lt;br /&gt;
 |10/29/2010&lt;br /&gt;
 |130&lt;br /&gt;
 |30&lt;br /&gt;
 |121&lt;br /&gt;
 |18&lt;br /&gt;
 |9&lt;br /&gt;
 |299&lt;br /&gt;
|-&lt;br /&gt;
 |11/1/2010&lt;br /&gt;
 |130&lt;br /&gt;
 |30&lt;br /&gt;
 |113&lt;br /&gt;
 |20&lt;br /&gt;
 |9&lt;br /&gt;
 |299&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:FEA-Nov01-1.png]]&lt;br /&gt;
&lt;br /&gt;
===MeeGo 1.2 Key Contacts===&lt;br /&gt;
'''MeeGo 1.2 Program Office'''&lt;br /&gt;
&lt;br /&gt;
* Core Program Manager: [mailto:Makoto.Sugano@nokia.com Makoto Sugano]&lt;br /&gt;
* Core Product Manager: [mailto:Gavin.Hindman@intel.com Gavin Hindman]&lt;br /&gt;
* Core Architect: [mailto:Sakari.Poussa@nokia.com Sakari Poussa]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Handset Program Manager: [mailto:Pierre.j.blouin@intel.com Pierre Blouin]&lt;br /&gt;
* Handset Product Manager: [mailto:Sami.Pienmaki@nokia.com Sami Pienimaki]&lt;br /&gt;
* Handset Architect: [mailto:mikko.k.ylinen@nokia.com Mikko Ylinen]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* In-vehicle Program Manager: [mailto:joel.clark@intel.com Joel Clark]&lt;br /&gt;
* In-vehicle Product Manager: TBD&lt;br /&gt;
* In-vehicle Architect: [mailto:Tom.Counihan@intel.com Tom Counihan]&lt;br /&gt;
&lt;br /&gt;
'''Core Technologists'''&lt;br /&gt;
*	API Core&lt;br /&gt;
**	Qt: [mailto:Adrian.Constantin@nokia.com Adrian Constantin]&lt;br /&gt;
**	Haptic: [mailto:Kaustabh.Debbarman@nokia.com Kaustabh Debbarman]&lt;br /&gt;
**	Publish &amp;amp; Subscribe: [mailto:Naba.Kumar@nokia.com Naba Kumar]&lt;br /&gt;
**	Text to Speech: No resources allocated&lt;br /&gt;
**	DRM: Not part of MeeGo.com&lt;br /&gt;
*	Device Sync: [mailto:Naba.Kumar@nokia.com Naba Kumar]&lt;br /&gt;
*	Kernel: [mailto:Arjan.van.de.ven@intel.com Arjan Van De Ven]&lt;br /&gt;
*	Location: Intel&lt;br /&gt;
*	Media Subsystem&lt;br /&gt;
**	Video &amp;amp; Editing: [mailto:Kaustabh.Debbarman@nokia.com Kaustabh Debbarman]&lt;br /&gt;
*	Package Management:Intel&lt;br /&gt;
*	Policy: [mailto:Kaustabh.Debbarman@nokia.com Kaustabh Dabbarman]&lt;br /&gt;
*	WRT: TBD&lt;br /&gt;
*	Web Services: Intel&lt;br /&gt;
*	Libmeegotouch: [mailto:Kaustabh.Debbarman@nokia.com Kaustabh Dabbarman]&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Architecture</id>
		<title>Architecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Architecture"/>
				<updated>2010-11-02T09:21:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mythi: /* Upcoming Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Architecture ==&lt;br /&gt;
&lt;br /&gt;
MeeGo architecture team is responsible for defining and managing the MeeGo architecture. MeeGo architecture consists of Core OS layer and number of UX verticals on top the Core OS layer. The architecture team decides which component to use for the functionality needed in MeeGo with the objective of consistency inside the Core OS and to the applications that run above it.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
&lt;br /&gt;
* '''[http://meego.com/users/arjan Arjan van de Ven]''', Chief Architect, responsible for MeeGo architecture&lt;br /&gt;
* '''[http://meego.com/users/poussa Sakari Poussa]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
* '''[http://meego.com/users/mythi Mikko Ylinen]''', Handset UX Architect, responsible for Handset UX architecture&lt;br /&gt;
* '''[http://meego.com/users/sunilsaxena Sunil Saxena]''', Core OS Architect, responsible for Core OS architecture&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
*  [http://lists.meego.com/listinfo/meego-architecture MeeGo architecture mailing list]&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
* Architecture team meets once a week. Currently the meetings are not public.&lt;br /&gt;
* Agenda and minutes of the meetings will be posted to the meego-architecture mailing list&lt;br /&gt;
* Anyone can propose topics to the architecture team agenda&lt;br /&gt;
* Architecture topics can and should be discussed on meego-architecture mailing list&lt;br /&gt;
* Architecture team is responsible of making the decision in case consensus is not reached&lt;br /&gt;
&lt;br /&gt;
=== Process Improvement Topics ===&lt;br /&gt;
&lt;br /&gt;
* How to make the architecture meetings open. Not all the topics can be open but most can be. Examples of non-open parts includes topics which involves IPR, legal, patent, business, product or schedule sensitive material.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Developer Documentation: APIs, tutorials, videos, examples ([[http://developer.meego.com]]), to be published soon&lt;br /&gt;
* Architecture Documentation: High level architecture pictures and description ([[http://meego.com/developers/meego-architecture]])&lt;br /&gt;
* Developer and Subsystem Documentation: Detailed technical description of each MeeGo subsystem. Guidelines for developers working on MeeGo. ([[http://wiki.meego.com/Architecture/Documentation]])&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* [[Architecture/Meetings]] - Meetings - agenda, minutes&lt;br /&gt;
&lt;br /&gt;
== Upcoming Features ==&lt;br /&gt;
&lt;br /&gt;
MeeGo Bugzilla lists the following features for MeeGo 1.2. However, no technical solution is agreed yet (some proposals exist, though).&lt;br /&gt;
&lt;br /&gt;
* Display backlight and keyboard backlight control: [http://bugs.meego.com/show_bug.cgi?id=5525 5525], [http://bugs.meego.com/show_bug.cgi?id=5526 5526], [http://bugs.meego.com/show_bug.cgi?id=5527 5527], [http://bugs.meego.com/show_bug.cgi?id=5528 5528]&lt;br /&gt;
** Proposal 1: Maemo 6 MCE&lt;br /&gt;
*** ''MCE provides activity monitoring and notifications via D-Bus, controls display and backlight, ALS reading and display tuning, airplane mode''&lt;br /&gt;
&lt;br /&gt;
* Sharing: [http://bugs.meego.com/show_bug.cgi?id=8179 8179], [http://bugs.meego.com/show_bug.cgi?id=8180 8180], [http://bugs.meego.com/show_bug.cgi?id=8181 8181]&lt;br /&gt;
** Proposal 1: Maemo6 Sharing framework&lt;br /&gt;
*** ''Sharing framework provides a unified API for sharing files via, e.g., BT, email, web services. It includes webupload engine and an API for transfer UI''&lt;br /&gt;
&lt;br /&gt;
* Qt style APIs (that are not covered by Qt Mobility) for display backlight control, alarm/time, heartbeat, system state, thermal&lt;br /&gt;
** Proposal 1: Maemo6 QmSystem&lt;br /&gt;
*** ''QmSystem provides Qt style public APIs for various system services that are not covered by Qt Mobility''&lt;br /&gt;
&lt;br /&gt;
* Profiles: [http://bugs.meego.com/show_bug.cgi?id=5771 5771], [http://bugs.meego.com/show_bug.cgi?id=5750 5750], [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 profiled&lt;br /&gt;
*** ''profiled provides a daemon and libraries to access and control profiles related data in the device. The libprofile (C) and libprofile-qt (Qt) are interfaces for the profile client to connect to the server using D-Bus. The profiled data is stored in ‘ini’ files which can be customized per different releases.''&lt;br /&gt;
&lt;br /&gt;
* Ringtones+feedback: [http://bugs.meego.com/show_bug.cgi?id=2889 2889]&lt;br /&gt;
** Proposal 1: Maemo6 NGF (non-graphic feedback)&lt;br /&gt;
*** ''The device has functionality to alert user of a call, alarms and notification (SMS, email, chat, system update) events. Events may or may not have a graphical part and it may have different behavior depending on the system state. Example of this is receiving an SMS message when there is no other activity and SMS message during a call. NGF provides a unified API for apps to request logical events. The actions (e.g,. play/show LED+audio+vibra) are combined in NGF and consistent look&amp;amp;feel is provided''.&lt;br /&gt;
&lt;br /&gt;
== Tools ==   &lt;br /&gt;
&lt;br /&gt;
Architecture tools   &lt;br /&gt;
&lt;br /&gt;
*   Architecture navigation tool - able to browse meego packages and visually see the dependencies (coming in Nov)&lt;/div&gt;</summary>
		<author><name>Mythi</name></author>	</entry>

	</feed>