Developer | Jolla |
---|---|
Written in | Qt/QML, C++ |
OS family | Linux (Unix-like) |
Working state | Current |
Source model | Open source with added closed-source components and extensions of third parties which can be of other licences as well. [1] [2] |
Initial release | 16 November 2013 [3] |
Latest release | 4.6.0.15 (Sauna) / 20 September 2024 |
Repository | |
Marketing target | Mobile and general purpose |
Available in | English for development, SDK & supporting documentation; over 21 national languages versions of UI in user's device |
Package manager | RPM Package Manager [4] |
Platforms | 32-bit and 64-bit ARM and 64-bit x86 |
Kernel type | Linux kernel |
Userland | GNU |
License | For end-user the EULA defines used open source and other licences components with a component's origin. [1] [2] |
Preceded by | MeeGo by alliance of Nokia & Intel |
Official website | sailfishos |
Sailfish OS is a paid Linux-based operating system based on free software, and open source projects such as Mer as well as including a closed source UI. The project is being developed by the Finnish company Jolla.
The OS first shipped with the original Jolla Phone in 2013; while its sale stopped in 2016, it was supplied with software updates until the end of 2020. It also shipped with Jolla Tablet in 2015 [5] and from other vendors licensing the OS. [6] The OS is ported by community enthusiasts to third-party mobile devices including smartphones [7] and tablet computers. [8] Sailfish OS can be used for many kinds of devices.
The OS is an evolved continuation of the Linux MeeGo OS previously developed by alliance of Nokia and Intel which itself relies on combined Maemo and Moblin. The MeeGo legacy is contained in the Mer core in about 80% of its code; the Mer name thus expands to MEego Reconstructed. This base is extended by Jolla with a custom user interface and default applications. Jolla and MERproject.org follow a meritocratic system to avoid the mistakes that led to the MeeGo project's then-unanticipated discontinuation. [9]
The main elements for Sailfish OS 2.0 include:
The Sailfish OS and the Sailfish software development kit (SDK) are based on the Linux kernel and Mer. [10] [11] [12] Sailfish OS includes a multi-tasking graphical shell called "Lipstick" built with Qt by Jolla on top of the Wayland display server protocol. [13] Jolla uses free and open-source graphics device drivers but the Hybris library allows use of proprietary drivers for Android. [14] [15] Jolla fuzzily stated in 2015 that their goal for Sailfish is to become open source eventually, [2] [ needs update? ] but some key components of Sailfish OS have been licensed proprietary by Jolla from the start and ever since (as of Sailfish OS 4.5.0.24 in September 2023). [16]
Sailfish OS can run some Android applications through a proprietary compatibility layer. [17]
Sailfish is targeted at mobile devices.[ citation needed ] Since it inherited around 80% of MeeGo code, Sailfish can be used as a complete general-purpose Linux OS on devices including in vehicle infotainment (IVI), navigation, smart TV, desktops and notebooks, yachts, automotive, e-commerce, home appliances, measuring and control equipment, smart building equipment, etc. See use cases of original MeeGo to compare,[ citation needed ] and the Devices section for devices that run the Sailfish OS.
The Sailfish OS SDK was announced at the Slush Helsinki conference in 2012, and the alpha was published in February 2013. [18] The SDK, installation and coding tutorials are available for free download from the Sailfish OS website despite the overall license not being open source. [1]
Sailfish SDK uses Qt with VirtualBox for development, compiling and emulation purposes, in contrast to the simulation method.[ citation needed ] This technique allows compilation on the Sailfish OS and full testing of developed software in the virtual machine, emulating –not simulating –the whole Sailfish OS.[ citation needed ] This also separates development activities and side effects from everything else running on the host computer, leaving it undisturbed by developments and tests. [19] According to Jolla, development with Sailfish SDK is development on Sailfish OS itself; there are no differences between developed software appearance and behaviour in the SDK and on a device running Sailfish OS.[ citation needed ]
The availability of source code to the SDK allows shaping and rebuilding to companies' or developers' specific needs,[ citation needed ] creating a context-specific environment that is set once and needs no preparation when the device is booted. The SDK runs on the operating systems Android, 32- and 64-bit versions of Linux, 64-bit versions of OS X, and Microsoft Windows. [20] It can be used for compiling software for Sailfish OS devices from Linux sources. Its general console/terminal mode follows a commonly used standard. Compatible binaries or libraries can also be used.[ citation needed ]
Sailfish OS uses open source Qt APIs (Qt 5, QtQuick 2 etc.) and a proprietary Sailfish Silica for the UI. Standard Linux APIs are provided by the Mer Core. [21]
Sailfish, Ubuntu and Plasma Active have been cooperating to share common APIs. When successful, this will make the platforms compatible on the API level. [22]
Sailfish Browser is the default web browser based on Gecko and using embedlite (also known as IPCLiteAPI), a lite-weight embedding API from Mozilla. Uses proprietary components. [23]
Officially Jolla declares supporting the following 14 languages for the user interface: Danish, German, English (UK), Spanish, French, Italian, Norwegian, Polish, Portuguese, Finnish, Swedish, Russian, Chinese (mainland), and Chinese (Hong Kong). For each of them, the OS has a dedicated keyboard. There are a few more languages which are unofficially supported by community freelancers not under control by Jolla, hence more than 20 languages are supported in total. Additional languages can be installed by skilled users due to the Linux architecture. [24]
After positive experiences with pushing early updates to a small group of opt-in users for Sailfish Update 9 and for the connectivity hotfix, Jolla has allowed all interested parties to try a new version of Sailfish OS about 1–2 weeks before official release, in a program called "Early access". It is expected to be useful for developers and technically minded users, and a step towards more community integration into the Sailfish release process, including improvement of quality by identifying critical issues which only show up in certain environments or device setups, before rolling the update out to the wider user audience. As an added bonus, it provides a window for developers to test their applications on new releases of Sailfish OS.
In the long term it will help Jolla to establish a developer program with early release candidate access for registered developers, and to have more community involvement in platform development. The first detail Jolla is hoping to learn from this is how it can gather feedback from a large audience in a reasonable way.
Basic details about the early access update:
Sailfish OS has three naming conventions: version number, update number and version name.
Software version [30] [31] | Initial release date [32] | Name [33] |
---|---|---|
v0.99.5 | 13 November 2013 | Haaganlampi (only for subscribed developers) |
v0.99.6 | 11 November 2013 | Idörpottarna (only for subscribed developers) |
v1.0.0 | 16 November 2013 | Kaajanlampi (initial public release) |
v1.0.1 | 2 December 2013 | Laadunjärvi ("Update 1") |
v1.0.2 | 27 December 2013 | Maadajärvi ("Update 2") |
v1.0.3 | 27 January 2014 | Naamankajärvi ("Update 3") |
v1.0.4 | 11 March 2014 | Ohijärvi ("Update 4") |
v1.0.5 | 7 April 2014 | Paarlampi ("Update 5") |
v1.0.6 | Not released | Raatejärvi ("Update 6"), was merged into v1.0.7 |
v1.0.7 | 3 June 2014 | Saapunki ("Update 7") |
v1.0.8 | 3 July 2014 | Tahkalampi ("Update 8") |
v1.1.0 | 16 September 2014 | Uitukka ("Update 9"), was labelled as "opt-in upgrade" |
v1.1.1 | 14 December 2014 | Vaarainjärvi ("Update 10") |
v1.1.2 | 1 February 2015 | Yliaavanlampi ("Update 11") |
v1.1.3 | Not released | Åkanttrasket ("Update 12"), was merged into v1.1.4 |
v1.1.4 | 24 March 2015 | Äijänpäivänjärvi ("Update 13") |
v1.1.5 | Not released | Österviken ("Update 14"), was dropped at release candidate stage |
v1.1.6 | 27 May 2015 | Aaslakkajärvi ("Update 15") |
v1.1.7 | 24 June 2015 | Björnträsket ("Update 16") |
v1.1.9 | 18 August 2015 | Eineheminlampi ("Update 17") |
v2.0.0 | 19 October 2015 | Saimaa ("Update 18") |
v2.0.1 | 12 January 2016 | Taalojärvi ("Update 19") |
v2.0.2 | 13 May 2016 | Aurajoki ("Update 20") |
v2.0.3 | 6 July 2016 | Espoonjoki ("Update 21"), OS version solely for the Turing Phone |
v2.0.4 | 4 November 2016 | Fiskarsinjoki ("Update 22") |
v2.0.5 | 14 December 2016 | Haapajoki ("Update 23") |
v2.1.0 | 3 February 2017 | Iijoki ("Update 24") |
v2.1.1 | 15 May 2017 | Jämsänjoki |
v2.1.2 | 20 September 2017 | Kiiminkijoki |
v2.1.3 | 6 October 2017 | Kymijoki |
v2.1.4 | 12 February 2018 | Lapuanjoki |
v2.2.0 | 30 May 2018 | Mouhijoki |
v2.2.1 | 31 August 2018 | Nurmonjoki |
v3.0.0 | 29 October 2018 | Lemmenjoki |
v3.0.1 | 2 January 2019 | Sipoonkorpi |
v3.0.2 | 13 March 2019 | Oulanka |
v3.0.3 | 23 April 2019 | Hossa |
v3.1.0 | 15 July 2019 | Seitseminen |
v3.2.0 | 24 October 2019 | Torronsuo |
v3.2.1 | 5 December 2019 | Nuuksio |
v3.3.0 | 1 April 2020 | Rokua |
v3.4.0 | 22 September 2020 | Pallas-Yllästunturi (the final release for the Jolla Phone) [34] |
v4.0.1 | 3 February 2021 | Koli |
v4.1.0 | 10 May 2021 | Kvarken |
v4.2.0 | 25 August 2021 | Verla |
v4.3.0 | 28 October 2021 | Suomenlinna |
v4.4.0 | 15 March 2022 | Vanha Rauma [35] |
v4.5.0 | 2 February 2023 | Struven Ketju |
v4.6.0 | 20 May 2024 | Sauna [36] |
When updating an installed Sailfish OS from an earlier release, for example after device factory reset, there are several stop releases [37] which must not be skipped and have to be installed before continuing on the path to subsequent releases. These releases provide new functionality that is not compatible with previous releases and have to be traversed in order not to put the Sailfish OS installation into an unstable state.
Software version | Release date | Name |
---|---|---|
v1.0.2.5 | 27 December 2013 | Maadajärvi |
v1.1.2.16 | 25 February 2015 | Yliaavanlampi |
v1.1.7.28 | 31 August 2015 | Björnträsket |
v1.1.9.30 | 22 October 2015 | Eineheminlampi |
v2.0.0.10 | 3 November 2015 | Saimaa |
v2.0.5.6 | 22 November 2016 | Haapajoki (only a stop release for some devices, e.g., the Jolla C / Intex Aquafish) |
v2.2.0.29 | 7 June 2018 | Mouhijoki |
v3.0.0.8 | 11 November 2018 | Lemmenjoki |
v3.2.0.12 | 5 November 2019 | Torronsuo |
v3.4.0.24 | 13 October 2020 | Pallas-Yllästunturi |
v4.0.1.48 | 16 February 2021 | Koli |
v4.1.0.24 | 27 May 2021 | Kvarken |
v4.2.0.21 | 16 September 2021 | Verla |
v4.3.0.15 | 16 February 2022 | Suomenlinna |
v4.4.0.72 | 30 September 2022 | Vanha Rauma [38] |
v4.5.0.25 | 29 February 2024 | Struven ketju [39] |
v4.6.0.15 | 20 September 2024 | Sauna (the final release for Jolla Tablet, Jolla C, Xperia X, and Gemini PDA) [40] |
The Sailfish website publishes [41] an online compendium of knowledge, links and instructions on porting issues.
In addition to its native applications, Sailfish can run some Android applications by installing them from an application store or directly through an APK file. Supported Android versions are 4.1.2 "Jelly Bean" on the original Jolla phone; 4.4.4 "Kit-Kat" on the Jolla C, Jolla tablet and Xperia X; 8.1.0 "Oreo", 9 "Pie" and 10 (depending on the Sailfish OS release) on Xperia XA2, Xperia 10 and Xperia 10 II. [42] Problems can arise if these applications were built without following Android standards about controls, which might not display correctly and so become unusable.
Sailfish OS uses Alien Dalvik, a proprietary Android compatibility layer. It does not emulate Android, but instead implements its APIs by adapting the Android Open Source Project (AOSP) code to run as an application. Android applications can thus run at native speed without any perceivable slow-down. Sailfish can run both native Sailfish and Android software simultaneously, with the user switching between them on the fly. [43]
Starting with Alien Dalvik 8.1 (also called "Android App Support" since then), it uses LXC [44] to improve security by better isolation, in the same way the open source Android compatibility layer Anbox is doing.
Sailfish OS can be used on any hardware with Linux-kernel support and compatible with the middleware utilising the Mer core. Community enthusiasts have ported Sailfish OS to a number of devices this way. [45] Instead of designation to a specific reference hardware platform, a VirtualBox implementation with the Sailfish SDK is available for development on Linux, OS X and Windows operating systems. This virtual machine implementation contains the whole Sailfish OS isolated from local resources and the local OS to enable convenient evaluation of the behaviour and performance of coded or ported software before deployment on real devices. [46] [47]
Manufacturers can provide mobile equipment with a licensed Sailfish OS, or as open source, or combining both and including their own or the operator's modifications and branding for specific markets or purposes.
This section needs to be updated.(May 2024) |
Due to the relative ease of porting and the open source license, Sailfish OS has also been unofficially ported [50] to other 3rd-party devices. The Hardware Adaptation Development Kit for porters has been published and is free. [51] These ports are mostly published on the Maemo and XDA Developers forums, and in the Mer wiki a list of the ports is compiled. [52] Due to license restrictions, proprietary parts or extensions such as the Alien Dalvik compatibility layer for Android apps are not included. However they can be added, e.g. when a manufacturer or distributor turns it from the community version into an officially supported version for a particular device. From the originally more than 80 ports, there are about 19 ports that are still in active development – as of March 2019 – meaning they have been updated to Sailfish 3:
To display the ease of porting Sailfish OS to other devices, Jolla showed created ports and community ports at events like the Mobile World Congress, Slush and FOSDEM:
Sailfish OS is promoted by Jolla and supported by the open Sailfish Alliance established in 2011, a group established to unite OEM and ODM manufacturers, chipset providers, operators, application developers and retailers. [79] On 16 August 2012, the user interface was reported to be ready for release. Jolla's CEO Jussi Hurmola stated in a ZDNet interview, " ... Our UI is ready now, we haven't released it yet, we will save it for the product launch and the platform is getting up now so the project looks pretty nice". [80]
The next day, Jolla's CEO Marc Dillon said on social networking website Twitter that the company had reached the first development target. Sailfish was debuted by the Jolla team, including a worldwide internet stream, as a demo of the OS, and the UI and SDK during the Slush event in Helsinki, Finland, on 21–22 November 2012. The alpha stage of Sailfish OS SDK was published at the end of February 2013 and was made available for free download.
On 16 September 2013, Jolla announced that its OS had been made compatible with Android applications and hardware. [81] The first telephone to use it was launched on 27 November 2013 at a pop-up DNA Kauppa shop in Helsinki. The first 450 telephones were sold at this event, while the rest of the preordered devices were shipped shortly after. [82]
In August 2015, version 1.1.9 "Eineheminlampi" was released, which added the main elements of the revamped Sailfish OS 2.0 user interface.
Sailfish OS 2.0.0 was launched with the Jolla Tablet, and existing devices, both smartphones and tablets, from Jolla's official distribution channels are supported with upgrade to Sailfish OS 2.0.0 and following updates.
In May 2016 Jolla announced the Sailfish Community Device Program, supporting developers and members of Sailfish OS community. [83]
Jolla staff met with members of the Russian technology community to break ground on the new software and promote Sailfish OS, as part of Jolla's BRICS strategy. As a result of those efforts, on 18 May 2015 the Russian minister of communications Nikolai Nikiforov announced plans to replace Apple's iOS and Google's Android platforms with new software based on Sailfish. He intends it to cover 50% of Russian needs in this area during next ten years, in comparison to the 95% currently covered with western technology. [84] [85] The Russian version is currently being developed under the brand name Mobile OS "Aurora" (мобильная ОС «Аврора»), [86] before 2019 as "Sailfish Mobile OS RUS". [87] [88] The Chinese multinational technology company Huawei was in talks with the Russian Ministry of Communications to install Aurora OS on tablets for Russia’s population census by August 2020. [89] Jolla has cut business ties with Russia in 2021. [90]
Sailfish Alliance is the open alliance established in 2011 by Jolla company to support the MeeGo ecosystem with new products, services and business opportunities around or using Sailfish OS, a Linux operating system combining Mer with proprietary components from Jolla and other parties, for various purposes and mobile devices.
The alliance is seen as a competitor to other groups like Android's Open Handset Alliance. [91]
In 2011 some of the MeeGo team working at Nokia left, and were funded by Nokia though their "Bridge" program to fund spin-out projects by ex-employees. [92] [93] [94] The Sailfish Alliance has sought to collaborate between the Finnish software developers, and overseas handset manufacturers, some of which are in China. [95] [96] The news media reports that a number of manufacturers in China and India want an alternative to Android. [91] [97] [98]
The Alliance aims to "unite OEM and ODM manufacturers, chipset providers, operators, application developers and retailers." [99]
The aim of the Alliance is to offer unique differentiation opportunities and sustainable competitive advantage for OEM and ODM manufacturers, chipset providers, operators, application developers, retailers and other interested in sides. [100]
Sailfish Secure is an open and secure mobile phone platform, based on Sailfish OS. It was introduced publicly in Barcelona, Spain at the Mobile World Congress on 2 March 2015 where plans for Sailfish Secure were presented.
It is based on a security-hardened version of Sailfish OS and SSH's communication encryption and key management platform. It is developed by Jolla (the Sailfish OS designer and developer) together with SSH Communications Security (the inventor of Secure Shell SSH protocol) in collaboration with the Sailfish Alliance.
Sailfish Secure is marketed as having a hardware platform independent approach that allows concept adaptation to local needs, and collaboration with other security partners. End customers like governments or large corporations are able to adapt the product to their preferred or used hardware platform, as it is not tied to a specific hardware or configuration. [101] [102]
Sony Mobile Communications Inc. was a multinational telecommunications company founded on October 1, 2001, as a joint venture between Sony Corporation and Ericsson. It was originally incorporated as Sony Ericsson Mobile Communications, and headquartered in London, England, until Sony acquired Ericsson's share in the venture on February 16, 2012. On April 1, 2021, Sony integrated its electronics businesses including Sony Mobile into one company called Sony Corporation.
UIQ is a discontinued software platform based upon Symbian OS, created by UIQ Technology AB. It is a graphical user interface layer that provides additional components to the core operating system, to enable the development of feature-rich mobile phones that are open to expanded capabilities through third-party applications.
Computer operating systems based on the Linux kernel are used in embedded systems such as consumer electronics, in-vehicle infotainment (IVI), networking equipment, machine control, industrial automation, navigation equipment, spacecraft flight software, and medical instruments in general.
OpenGL for Embedded Systems is a subset of the OpenGL computer graphics rendering application programming interface (API) for rendering 2D and 3D computer graphics such as those used by video games, typically hardware-accelerated using a graphics processing unit (GPU). It is designed for embedded systems like smartphones, tablet computers, video game consoles and PDAs. OpenGL ES is the "most widely deployed 3D graphics API in history".
Maemo is a Linux-based software platform originally developed by Nokia, now developed by the community, for smartphones and Internet tablets. The platform comprises both the Maemo operating system and SDK. Maemo played a key role in Nokia's failed strategy to compete with Apple and Android; the only retail devices that shipped with Maemo were the Nokia Internet tablet line released in 2005 and the Nokia N900 smartphone in 2009.
A mobile operating system is an operating system used for smartphones, tablets, smartwatches, smartglasses, or other non-laptop personal mobile computing devices. While computers such as typical/mobile laptops are "mobile", the operating systems used on them are usually not considered mobile, as they were originally designed for desktop computers that historically did not have or need specific mobile features. This "fine line" distinguishing mobile and other forms has become blurred in recent years, due to the fact that newer devices have become smaller and more mobile, unlike the hardware of the past. Key notabilities blurring this line are the introduction of tablet computers, light laptops, and the hybridization of the two in 2-in-1 PCs.
Moblin, short for 'mobile Linux', is a discontinued open source operating system and application stack for Mobile Internet Devices (MIDs), netbooks, nettops and embedded devices.
Apache Cordova is a mobile application development framework created by Nitobi. Adobe Systems purchased Nitobi in 2011, rebranded it as PhoneGap, and later released an open-source version of the software called Apache Cordova. Apache Cordova enables software programmers to build hybrid web applications for mobile devices using CSS3, HTML5, and JavaScript, instead of relying on platform-specific APIs like those in Android, iOS, or Windows Phone. It enables the wrapping up of CSS, HTML, and JavaScript code depending on the platform of the device. It extends the features of HTML and JavaScript to work with the device. The resulting applications are hybrid, meaning that they are neither truly native mobile application nor purely Web-based. They are not native because all layout rendering is done via Web views instead of the platform's native UI framework. They are not Web apps because they are packaged as apps for distribution and have access to native device APIs. Mixing native and hybrid code snippets has been possible since version 1.9.
The Nokia N900 is a smartphone made by Nokia, launched at Nokia World on 2 September 2009 and released in November. Superseding the Nokia N810, the N900's default operating system, Maemo 5, is a Linux-based OS originally developed for the Nokia 770 Internet Tablet. It is the first Nokia device based upon the Texas Instruments OMAP3 microprocessor with the ARM Cortex-A8 core. Unlike the three Nokia Internet tablets preceding it, the Nokia N900 is the first Maemo device to include telephony functionality.
Symbian was a mobile operating system (OS) and computing platform designed for smartphones. It was originally developed as a proprietary software OS for personal digital assistants in 1998 by the Symbian Ltd. consortium. Symbian OS is a descendant of Psion's EPOC, and was released exclusively on ARM processors, although an unreleased x86 port existed. Symbian was used by many major mobile phone brands, like Samsung, Motorola, Sony Ericsson, and above all by Nokia. It was also prevalent in Japan by brands including Fujitsu, Sharp and Mitsubishi. As a pioneer that established the smartphone industry, it was the most popular smartphone OS on a worldwide average until the end of 2010, at a time when smartphones were in limited use, when it was overtaken by iOS and Android. It was notably less popular in North America.
MeeGo is a discontinued Linux distribution hosted by the Linux Foundation, using source code from the operating systems Moblin and Maemo. MeeGo was primarily targeted at mobile devices and information appliances in the consumer electronics market. It was designed to act as an operating system for hardware platforms such as netbooks, entry-level desktops, nettops, tablet computers, mobile computing and communications devices, in-vehicle infotainment devices, SmartTV / ConnectedTV, IPTV-boxes, smart phones, and other embedded systems.
The Nokia N9 is a flagship smartphone developed by Nokia, running on the Linux-based MeeGo mobile operating system. Announced in June 2011 and released in September, it was the first and only device from Nokia with MeeGo, partly because of the company's partnership with Microsoft announced that year. It was initially released in three colors: black, cyan and magenta, before a white version was announced at Nokia World 2011.
Firefox OS is a discontinued open-source operating system made for smartphones, tablet computers, smart TVs, and dongles designed by Mozilla and external contributors. It is based on the rendering engine of the Firefox web browser, Gecko, and on the Linux kernel. It was first commercially released in 2014.
Mer was a free and open-source software distribution, targeted at hardware vendors to serve as a middleware for Linux kernel-based mobile-oriented operating systems. It is a fork of MeeGo.
Jolla Oy is a Finnish technology company; vendor and developer of Sailfish OS. Headquartered in Tampere, Finland, Jolla has its own research and development offices in Helsinki, Tampere and Cyberport, Hong Kong. Jolla was founded in 2011 by former Nokia staff of the MeeGo project team to use the MeeGo opportunities and its "endless possibilities".
The Jolla smartphone is a smartphone produced by Jolla that runs the Sailfish OS. Following a successful crowdfunding campaign, it was manufactured in China and released on 27 November 2013. The Jolla smartphone is no longer supported by Sailfish OS updates, the last update compatible being v3.4.0, released on 22 September 2020.
AOKP, short for Android Open Kang Project, is an open-source replacement distribution for smartphones and tablet computers based on the Android mobile operating system. The name is a play on the word kang and AOSP. The name was a joke, but it stuck. It was started as free and open-source software by Roman Birg based on the official releases of Android Open Source Project by Google, with added original and third-party code, features, and control.
The Nokia X platform was a Linux-based mobile operating system and software platform originally developed by Nokia, and subsequently by Microsoft Mobile. Introduced on 24 February 2014, it was forked from Android and used on all the devices of the Nokia X family. It was also the next Nokia Linux project after the ill-fated MeeGo.
postmarketOS is an operating system primarily for smartphones, based on the Alpine Linux distribution.