Project

General

Profile

TasksFunding » History » Version 258

Denis 'GNUtoo' Carikli, 05/02/2019 03:44 PM
Add background information, that could help other free software projects to apply

1 1 Denis 'GNUtoo' Carikli
{{>toc}}
2
3 181 Denis 'GNUtoo' Carikli
h1. Funding
4 1 Denis 'GNUtoo' Carikli
5 181 Denis 'GNUtoo' Carikli
h2. Funding procedure
6
7 258 Denis 'GNUtoo' Carikli
h3. Background and rationale for funding work through the NLnet foundation
8
9
The NLnet foundation managed to get some European Union grants to fund work on privacy and trust technologies.
10
11
It's then up to individuals to apply to it, and to define tasks that can improve privacy and trust on the Internet, which then the NLnet foundation can choose to fund.
12
13
This could for instance be used to fund the advancement of software and hardware freedom.
14
15
The only requirement (beside improving privacy and trust) seem to be that the individuals have to be located in the European Union. 
16
17
They are then paid once tasks defined and/or the deliverables mentioned in the task have been completed.
18
19
References:
20
* "Fosdem Lightning talks on the topic":https://fosdem.org/2019/schedule/event/nextgen_internet/
21
22 247 Denis 'GNUtoo' Carikli
h3. Tasks accepted for funding
23 186 Denis 'GNUtoo' Carikli
24 247 Denis 'GNUtoo' Carikli
* [[Tasks_funding#"Finish porting Replicant to a newer Android version" nlnet Grant application|Finish porting Replicant to a newer Android version]]
25 248 Denis 'GNUtoo' Carikli
* [[TasksFunding#Graphics-acceleration|Graphics acceleration]]
26 84 Denis 'GNUtoo' Carikli
27
h3. Applicant criteria
28
29 249 Denis 'GNUtoo' Carikli
* -The applicants will need to already have Patches in Replicant to apply. So if you want to apply and don't have any patches in Replicant, the easiest way is just to send some useful patches.-
30
* -The applicants will need to be able to demonstrate that they have the required skills by showing contributions in free and open source project in similar areas.-
31
* -The applicants will need to be able to do contract work-
32
33
The application criteria wrere handled by the NLnet foundation.
34 93 Denis 'GNUtoo' Carikli
35 84 Denis 'GNUtoo' Carikli
h3. Discussions
36
37
There is "a thread about funding on the mailing list":https://lists.osuosl.org/pipermail/replicant/2019-January/001774.html about that
38 76 Denis 'GNUtoo' Carikli
39 257 Denis 'GNUtoo' Carikli
h3. Mistakes
40
41
When submitting a task to the NLnet Foundation:
42
* Make sure to select a call in "Please select a call", like "NGI Privacy & Trust Enhancing Technologies"
43
44 250 Denis 'GNUtoo' Carikli
h2. Port Replicant to a newer Android version
45 113 Denis 'GNUtoo' Carikli
46
Replicant is currently based on LineageOS 13 which is based on Android 6.0.
47
It is becoming very urgent to upgrade Replicant to a newer release of Android, as Android 6.0 is not supported anymore. It would probably also make it way easier to fix the following issues:
48
* Replicant is currently lagging behind with security fixes
49
* Replicant cannot be built from a GNU/Linux distribution that follows the Free Software Distribution Guidelines
50
51
*Hardware requirements* :
52
* A computer that is able to build Replicant.
53
* A smartphone or tablet that can easily supported by the new version of Replicant and that meet Android 9 [[HardwareRequirements]].
54
55
*Expected outcomes*:
56
* Remove all proprietary components of LineageOS and make sure that Replicant follows the "Free Software Distributions Guidelines (FSDG)":https://www.gnu.org/distros/"
57
* Port all the changes needed to successfully boot without any proprietary software in Replicant
58
* Make sure that most of the security issues are fixed, and lower the attack surface if possible.
59
* Make sure that Replicant can be built on a GNU/Linux distribution that follows the "Free Software Distributions Guidelines (FSDG)":https://www.gnu.org/distros/
60
* Rebrand LineageOS as Replicant
61
62 254 Denis 'GNUtoo' Carikli
*Funding*: We applied to https://nlnet.nl/PET
63 251 Denis 'GNUtoo' Carikli
64 254 Denis 'GNUtoo' Carikli
h3. NLnet foundation Grant application for "Finish porting Replicant to a newer Android version"
65 253 Denis 'GNUtoo' Carikli
66
h4. Contact information:
67
68
|_. Your name | Denis Carikli |
69
|_. Email address | [[PrivateContact#Email]] + our contact at the FSF |
70
|_. Phone numbers | GNUtoo's phone number |
71
|_. Organisation | Replicant and the FSF |
72
|_. Country | France(Denis Carikli), USA (FSF) |
73
74
h4. General project information
75
76 125 Denis 'GNUtoo' Carikli
|_. Project name | Finish porting Replicant to a newer Android version |
77 128 Denis 'GNUtoo' Carikli
|_. Website / wiki | https://redmine.replicant.us/projects/replicant/wiki/Porting_Replicant_to_Android_9 |
78 253 Denis 'GNUtoo' Carikli
|_. Abstract: Can you explain the whole project and its expected outcome(s).in 1200 characters | <pre>
79 196 Denis 'GNUtoo' Carikli
Replicant is a fully free software Android distribution which
80 1 Denis 'GNUtoo' Carikli
is approved by the FSF (http://gnu.org/distros).
81 196 Denis 'GNUtoo' Carikli
82
The combination of Android Open Source Project source code with
83
the Linux source code provided by the device vendor is not
84 216 Denis 'GNUtoo' Carikli
sufficient to produce a fully free Android distribution that
85 196 Denis 'GNUtoo' Carikli
works: a lot of the code that makes critical hardware components
86 216 Denis 'GNUtoo' Carikli
work (the modem, graphics, audio, GPS, etc) is in userspace.
87 196 Denis 'GNUtoo' Carikli
Because of that, most device manufacturers don't release them as
88 195 Denis 'GNUtoo' Carikli
free software.
89 196 Denis 'GNUtoo' Carikli
90
To make such hardware work, the Replicant project manages to
91 216 Denis 'GNUtoo' Carikli
replace or avoid such nonfree software.
92 196 Denis 'GNUtoo' Carikli
93
Replicant is currently based on LineageOS 13.0 which in turn is based
94 216 Denis 'GNUtoo' Carikli
on Android 6.0.1 which are both not supported anymore. Replicant is
95 196 Denis 'GNUtoo' Carikli
based on LineageOS because it supports way more smartphones and
96
tablets than the Android Open Source Project.
97 1 Denis 'GNUtoo' Carikli
98
The project consists in porting Replicant changes on top of the
99
Android 9 release of the Android Open Source project,
100
and when LineageOS 16 will be ready, to backport our changes on
101
top of LineageOS 16.
102 253 Denis 'GNUtoo' Carikli
</pre> |
103 1 Denis 'GNUtoo' Carikli
|_. Have you been involved with projects or organizations relevant to this project before?
104 253 Denis 'GNUtoo' Carikli
And if so, can you tell us a bit about your contributions? | Yes: I've been involved in Replicant since the beginning both as a developer and for managing the project:
105
As a developer:
106
* I did most/all the initial system work and made it work for the the HTC Dream, and the Google Nexus One.
107
* I also worked on porting the Goldelico GTA04, Galaxy nexus, Galaxy Tab 2 7.1 along with other Replicant developers and did various bug fixes and improvements.
108
* I am also doing code reviews for patches.
109
And as for managing the project I'm involved in:
110
* public relations (blog posts, etc)
111
* fund usage decisions
112
* infrastructure (system administration with other developers, etc)
113
* documentation
114
* project direction and strategic decisions |
115 1 Denis 'GNUtoo' Carikli
116 253 Denis 'GNUtoo' Carikli
h4. Requested support
117
118 140 Denis 'GNUtoo' Carikli
|_. Requested Amount (Between 5000 and 50000 Euros) | 50000 Euros |
119 253 Denis 'GNUtoo' Carikli
|_. Does the project have other funding sources, both past and present? | 
120
The Replicant project has about 200000 dollars at disposition:
121
* The Replicant project has a donation page https://crm.fsf.org/civicrm/contribute/transact?reset=1&id=19. Part of the donations were used for buying devices and reimburse conference attendances. We have about 20000 dollars remaining from the donation.
122
* The Replicant project recently received 200000 dollars from Handshake: https://www.fsf.org/news/free-software-foundation-receives-1-million-from-handshake As the FSF takes 10% that leaves us 180000 dollars |
123 190 Denis 'GNUtoo' Carikli
124
Explain what the requested budget will be used for? 
125
<pre>
126 189 Denis 'GNUtoo' Carikli
The budget will only be used to fund this task through contract work.
127 217 Denis 'GNUtoo' Carikli
128 133 Denis 'GNUtoo' Carikli
We think it will take something between 3 and 6 months of work
129
for one full time developer.
130
131 217 Denis 'GNUtoo' Carikli
However it is always difficult to evaluate precisely the amount of time
132
that this kind of project would take as sometimes it can be slowed down
133 155 Denis 'GNUtoo' Carikli
a lot due to bugs needing to be fixed.
134
135
For instance, when adding support for the Nexus One to Replicant,
136
a lot of time was spent dealing with display issues that didn't affect
137 1 Denis 'GNUtoo' Carikli
the upstream projects, because they relied on the GPU which required
138
nonfree software to work.
139
140
If we take the cost of a Freelance developer in the USA (75$ to 150$
141
per hour) as a basis, to enable people living in Europe and the USA
142
to apply, we can fund a developer to work on it for a period that
143
is mostly equivalent to something between 2 to 4 months full
144
time.
145 169 Denis 'GNUtoo' Carikli
146
So far we have at least one person interested in working on it
147
as a contractor (me), and one volunteer who wants to work on it at the
148
same time, but who cannot do it full time. We will make sure
149 155 Denis 'GNUtoo' Carikli
that everybody has a chance to apply for doing contract work.
150
151
If the work is not done when the 50000E run out, and if we cannot
152 217 Denis 'GNUtoo' Carikli
make sure that it will be completed by volunteers in a reasonable
153
timeframe, the Replicant project will most probably use its existing
154
funds to pay for contract work to make sure that this task is completed.
155
156 155 Denis 'GNUtoo' Carikli
The Replicant project will also take care of ensuring that the
157 217 Denis 'GNUtoo' Carikli
people that will work on this task have the necessary hardware to
158
do it, for instance by shipping or reimbursing the purchase of a
159
compatible smartphone with the Replicant project money.
160 191 Denis 'GNUtoo' Carikli
161
Once we have the Samsung Galaxy SIII fully working with
162 217 Denis 'GNUtoo' Carikli
Replicant 9, we will add support for most smartphones
163 191 Denis 'GNUtoo' Carikli
and tablets we currently support in Replicant, and add support
164
for more recent smartphones (the most recent one we currently
165 171 Denis 'GNUtoo' Carikli
support has been released in 2013).
166 1 Denis 'GNUtoo' Carikli
167 217 Denis 'GNUtoo' Carikli
We also have a very basic documentation on the Android 9 port here:
168
https://redmine.replicant.us/projects/replicant/wiki/Porting_Replicant_to_Android_9
169
</pre>
170 1 Denis 'GNUtoo' Carikli
171 217 Denis 'GNUtoo' Carikli
Compare your own project with existing or historical efforts.
172 168 Denis 'GNUtoo' Carikli
<pre>
173
Upgrading Replicant to a new Android version usually took about 2 or 3
174
months of full-time equivalent work for one person.
175 170 Denis 'GNUtoo' Carikli
Here, we already have a device (The Galaxy SIII 4G) booting under Android 9
176
master before the release, with a kernel that is closely based on upstream
177
Linux, but a lot still needs to be done (modem, audio, sensors, etc) and
178 132 Denis 'GNUtoo' Carikli
validated. The Android architecture also changed a lot more between Android
179
6.0.1 and Android 9 than it did when we ported Replicant to newer Android
180 217 Denis 'GNUtoo' Carikli
versions.
181
</pre>
182
183
What are significant technical challenges you expect to solve during the project, if any?
184
<pre>
185 76 Denis 'GNUtoo' Carikli
We will also need to make sure that Replicant 9 can be built with a
186
GNU/Linux distribution that is approved by the FSF. This could be
187
challenging if they lack some of the packages required to build Android.
188 1 Denis 'GNUtoo' Carikli
</pre>
189
190
Describe the ecosystem of the project, and how you will engage with relevant actors and promote the outcomes?
191
<pre>
192
This project will re-use code from several projects such as Android,
193
drm-hwcomposer, Mesa and Lima driver. Whenever possible we will foster
194
collaboration with these projects and submit our changes upstream.
195
196
The Replicant project contributors and the FSF will supervise
197 253 Denis 'GNUtoo' Carikli
contractors to do the work.
198
199
A blog post will announce that the Replicant project
200
has got some funding for this specific task, and that it is
201
looking for a contractor to work on it. This is to make sure
202
that everyone has equal chances in the application process.
203
204
Then the most suited contractor will be selected. Only contractors
205
that already have worked on similar tasks as part of free and open
206
source software projects will be chosen. This way we can look at
207
their existing contributions and make sure that they are able to
208
do the task before engaging with them.
209
210
The Replicant project will also make sure that the contractor has
211
or gets the hardware required to work on the task, before starting
212
to work on it.</pre>
213
214
|_. Attachments | None |
215 256 Denis 'GNUtoo' Carikli
216
h4. How may we handle your information
217
218
|_. What should we do in the other case,
219
 e.g. when your project is not immediately selected? | I allow NLnet Foundation to keep the information I submit on record, should future funding opportunities arise |
220
|_. Send me a copy of this application. | check-box checked |
221
|_. PGP pubkey | None (if we use Replicant contact address, we can't encrypt to it) |
222 250 Denis 'GNUtoo' Carikli
223 165 dl lud
h2. Graphics acceleration
224 1 Denis 'GNUtoo' Carikli
225 173 dl lud
Currently, all supported devices on Replicant lack a free software driver for their GPU. This means that OpenGL ES (GLES) rendering must be done on the CPU (software rendering). The current approach to software rendering on Replicant 6 is based on "libAGL":https://android.googlesource.com/platform/frameworks/native/+/master/opengl, an optimized GLES 1.x implementation that uses "libpixelflinger":https://android.googlesource.com/platform/system/core/+log/master/libpixelflinger software renderer. Development on both these libraries ceased in 2013 and no work was done to support newer GLES versions.
226 226 dl lud
The major consequences of this are that:
227 173 dl lud
* Critical applications like web browsers crash due to lack of GLES 2.0 (#705). Replicant currently uses an out-dated browser that has many security flaws.
228 1 Denis 'GNUtoo' Carikli
* Replicant relies on patches to the Android framework to make things like the camera application work.
229 166 dl lud
* The rendering speed has degraded over the newer Android versions, like Android 6. Even applications that do not crash become difficult to use due to the huge rendering delays.
230 235 dl lud
231 1 Denis 'GNUtoo' Carikli
This task aims to fix all these severe issues by putting together a new graphics stack for the Android 9 port. This new graphics stack must be compatible with Android 9 Hardware Abstraction Layers (HAL) and provide at least GLES 2.0 rendering. It should be flexible enough to do software rendering with "Mesa":https://www.mesa3d.org/intro.html or "SwiftShader":https://swiftshader.googlesource.com/SwiftShader (Google's current software renderer), and also GPU rendering on devices where a free GPU driver is available.
232 235 dl lud
233 1 Denis 'GNUtoo' Carikli
"Joonas Kylmälä":https://redmine.replicant.us/users/8585 has done some introductory work on the Android 9 port for the i9305, and found a way to have it rendering to the screen. He put together a graphics stack composed of: gbm_gralloc ("Gralloc HAL":https://source.android.com/devices/graphics/implement#gralloc_hal) + drm_hwcomposer ("Hardware Composer HAL":https://source.android.com/devices/graphics/implement#hardware_composer_hal) + Mesa with kms_swrast driver with softpipe backend (CPU software renderer for GLES). This will be the starting point for this task.
234 235 dl lud
235 1 Denis 'GNUtoo' Carikli
Joonas' prototype shows that Replicant can use "gbm_gralloc":https://osdn.net/projects/android-x86/scm/git/external-gbm_gralloc/summary, an existing graphics memory allocator (gralloc) HAL maintained(ish) by Android-x86, in conjunction with "drm-hwcomposer":https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer, a libre implementation of Android's Hardware Composer HAL based on Linux's DRM, to achieve software rendering with Mesa. This solution avoids the need to write a custom gralloc for Replicant, and takes advantage of the hardware acceleration for composition provided by drm-hwcomposer on devices with a free software DRM driver (e.g. exynos-based smartphones and tablets).
236 236 dl lud
237 237 dl lud
Much more testing is needed to confirm that gbm_gralloc can be the definitive gralloc HAL on Replicant 9. It still wasn't tried with SwiftShader, or even Mesa's llvmpipe backend, which is a must since the softpipe backend is too slow to be usable.
238 235 dl lud
Joonas' tests showed that some other components will need our attention, mostly the drm/exynos driver. In order to make drm/exynos work with gbm_gralloc and drm-hwcomposer Joonas had to disable "DRM-Auth":https://en.wikipedia.org/wiki/Direct_Rendering_Manager#DRM-Master_and_DRM-Auth and hack some missing pixel formats into it by using the default pixel format for everything. Besides drm/exynos, we will also have to make the graphics stack work with the "virtual GEM (vGEM) driver":https://www.phoronix.com/scan.php?page=news_item&px=DRM-vGEM-Mesa-Software, in order to support devices that lack a real drm driver.
239
240
The major and first goal of this task is thus to build upon Joonas's prototype and put together a stable and fully free graphics stack, compatible with GLES 2.0, that does software rendering through Mesa's llvmpipe with a decent performance.
241 1 Denis 'GNUtoo' Carikli
242 165 dl lud
*Hardware requirements*: A computer that is able to build Replicant. A Samsung Galaxy S3 or S3 4G to run the [[Porting_Replicant_to_Android_9|current Replicant 9 port]].
243 1 Denis 'GNUtoo' Carikli
244
*Difficulty*: Medium / Hard
245
246
*Requirements/Prerequisites*: Knowledge of C++, kernel interfaces knowledge or the ability to learn them
247
248 235 dl lud
*Expected outcomes*:
249 226 dl lud
* Graphics stack with decent performance on software rendering
250 1 Denis 'GNUtoo' Carikli
* Working GLES 2.0 implementation
251
* Fast enough graphics
252 209 dl lud
* F-Droid applications not crashing anymore because of GLES.
253 1 Denis 'GNUtoo' Carikli
254 210 dl lud
*Time +estimation+*:
255 1 Denis 'GNUtoo' Carikli
256 237 dl lud
|_. Step |_. man-hours |
257
| Set up the development environment, including the current Replicant 9 port on the test device. |>. 24 |
258
| Read AOSP documentation and understand all details of the graphics stack. |>. 16 |
259
| Adapt the build files to use Mesa's llvmpipe backend instead of softpipe. Fix potential LLVM version incompatibilities between Mesa and Android. |>. 40 |
260
| Properly implement the missing pixel formats in drm/exynos and try to have it merged into upstream. |>. 72 |
261
| Find a proper way to use DRM-Master and DRM-Auth with gbm_gralloc and drm-hwcomposer. |>. 40 |
262 238 dl lud
| Create test scenarios and check if the graphics stack works as expected. Consider "alternative grallocs":https://redmine.replicant.us/projects/replicant/wiki/GraphicsResearch#Gralloc if necessary. |>. 40 |
263 234 dl lud
| Make the graphics stack work with vGEM driver besides drm/exynos. |>. 40 |
264 1 Denis 'GNUtoo' Carikli
| Document the design decisions. |>. 16 |
265
|_. TOTAL |_>. 288 |
266 252 Denis 'GNUtoo' Carikli
267 1 Denis 'GNUtoo' Carikli
h3. Subtasks
268
269 235 dl lud
The following sub-tasks could also be worked on after finishing writing the gralloc:
270 1 Denis 'GNUtoo' Carikli
* [[Tasks_funding#SwiftShader|SwiftShader]]
271
* [[Tasks_funding#llvmpipe optimizations|llvmpipe optimizations]]
272
* [[Tasks_funding#Lima driver|Lima driver]]
273 252 Denis 'GNUtoo' Carikli
274 235 dl lud
h3. SwiftShader
275 238 dl lud
276 1 Denis 'GNUtoo' Carikli
"SwiftShader":https://swiftshader.googlesource.com/SwiftShader is Google's current software renderer that is capable of GLES 2.0 and is now "under work to support Vulkan":https://swiftshader.googlesource.com/SwiftShader/+log/master.
277 238 dl lud
278 232 dl lud
Mesa is the preferred renderer on Replicant for several reasons such as its support for both software and hardware (GPU) rendering, and its big community, with hundreds of active contributors. However, Mesa lacks a Vulkan software renderer. With Vulkan soon becoming a "requirement for new Android versions":https://android-developers.googleblog.com/2019/03/introducing-android-q-beta.html, we must make sure that Replicant's graphics stack can use SwiftShader in order to become futureproof. Furthermore, SwiftShader was built with performance in mind, specially for ARM CPUs, and may bring speed improvements on some devices.
279 238 dl lud
280 233 dl lud
The goal of this sub-task is thus to create a compile-time or run-time option that allows using Replicant 9 with SwiftShader as it's software renderer instead of Mesa.
281 232 dl lud
282 1 Denis 'GNUtoo' Carikli
*Hardware requirements*: A computer that is able to build Replicant. A smartphone or tablet that is supported by Replicant to be able to test the result.
283
284
*Difficulty*: Medium
285
286
*Requirements/Prerequisites*: Knowledge of C++, Makefiles and git. Android's graphics stack knowledge or the ability to learn them.
287
288 238 dl lud
*Expected outcomes*:
289
* SwiftShader running on Replicant.
290 1 Denis 'GNUtoo' Carikli
* Working Vulkan implementation.
291 211 dl lud
292
*Time +estimation+*: 40 man-hours.
293 252 Denis 'GNUtoo' Carikli
294 1 Denis 'GNUtoo' Carikli
h3. llvmpipe optimizations
295
296
Mesa is a highly versatile library that can be extended with device drivers to allow it to be used in different environments ranging from software emulation to complete hardware acceleration. One such driver is the "Gallium llvmpipe driver":https://www.mesa3d.org/llvmpipe.html, which is a software rasterizer that uses LLVM to do runtime code generation. It only needs a CPU to run graphics computations and thus brings full GLES support to all Replicant devices.
297
298
"llvmpipe has been integrated in Replicant 6":https://git.replicant.us/replicant/external_mesa3d/log/ but it's not activated by default yet as it is very slow. It is also not fully complete.
299
300
To fix that, llvmpipe and/or the integration of it in Replicant should be optimized. We should first start by configuring llvmpipe and/or Mesa "to not implement very expensive OpenGL operations":https://www.mesa3d.org/perf.html. If that's not sufficient, or if that breaks application compatibility, various software or hardware features ("ARM NEON":https://www.arm.com/products/processors/technologies/neon.php, hardware 2D acceleration, etc) could be used to improve the speed.
301 231 dl lud
302
Considerable speed improvements may be achieved with a fine-tuned emulation for division instructions. The ARM cores on many Replicant devices do not have hardware "support for the SDIV/UDIV instructions":https://community.arm.com/processors/b/blog/posts/divide-and-conquer. We should profile some apps and check whether GLES functions requiring divisions are to blame for the poor performance.
303 1 Denis 'GNUtoo' Carikli
304
*Hardware requirements* : A computer that is able to build Replicant. A smartphone or tablet that is supported by Replicant to be able to test the result.
305
306
*Difficulty*: Medium / Hard (depending on the amount of optimizations required)
307
308
*Requirements/Prerequisites*: See with Mesa project
309
310 211 dl lud
*Expected outcomes*: faster llvmpipe on ARM devices, able to run apps such as Fennec F-Droid (Firefox).
311
312
*Time +estimation+*:
313
314 234 dl lud
|_. Step |_. man-hours |
315
| Setup a "testing and benchmarking environment":https://source.android.com/devices/graphics/testing |>. 40 |
316
| Disable expensive OpenGL operations. Check speedup and stability. |>. 24 |
317
| Recap matrix operations (Linear Algebra) and study ARM NEON. |>. 48 |
318 242 dl lud
| Do a profiling of several apps to find the most used GLES operations. |>. 32 |
319 234 dl lud
| Use "Ne10 library":https://github.com/projectNe10/Ne10 or "Neon Intrinsics":https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics for the most used GLES operations. |>. 80 |
320
| Fix bugs, re-write the code where needed, get it stable. |>. 80 |
321 1 Denis 'GNUtoo' Carikli
|_. TOTAL |_>. 304 |
322 252 Denis 'GNUtoo' Carikli
323 1 Denis 'GNUtoo' Carikli
h3. Lima driver
324
325
"Lima":https://gitlab.freedesktop.org/lima is a free software Mesa driver for ARM Mali-4xx (Utgard) GPUs. These GPUs are present in several Replicant supported devices such as Galaxy S2, S3, S3 4G, Note and Note 2. 
326
327
Lima aims to full GLES support but it is still in development. However the "current implementation status":https://gitlab.freedesktop.org/lima/mesa/issues/39#note_79193 already allows the hardware acceleration of several tasks. GPU-based hardware acceleration is faster and less power hungry than software rendering, both by several orders of magnitude. It would allow Replicant devices to run applications with a performance close to that of non-free devices.
328 167 dl lud
329
*Hardware requirements* : A computer that is able to build Replicant. A Replicant device with a Mali-4xx GPU that can run mainline Linux (e.g. Galaxy S3 or Note 2).
330
331
*Difficulty*: Medium
332
333
*Requirements/Prerequisites*: "See with Lima project":https://gitlab.freedesktop.org/lima/web/wikis/home#build-and-install
334 1 Denis 'GNUtoo' Carikli
335 212 dl lud
*Expected outcomes*: Lima driver being used for GLES rendering on a supported device.
336
337 234 dl lud
|_. Step |_. man-hours |
338
| Rebase "Lima's Linux kernel DRM driver":https://gitlab.freedesktop.org/lima/linux on top of "forkbomb's Midas on Mainline kernel":https://blog.forkwhiletrue.me/pages/midas-mainline/. |>. 80 |
339
| Replace mainline Mesa for "Lima's Mesa":https://gitlab.freedesktop.org/lima/mesa (with their driver).  |>. 16 |
340
| Build and test thoroughly with "synthetic":https://source.android.com/devices/graphics/testing and real applications. |>. 40 |
341
| Create a fallback mechanism that uses the software renderer for GLES functions not yet implemented in Lima. |>. 100 |
342 222 dl lud
|_. TOTAL |_>. 236 |
343 252 Denis 'GNUtoo' Carikli
344 243 dl lud
h3. Software Bill of Materials
345
346
* "Replicant 9":https://redmine.replicant.us/projects/replicant/wiki/Porting_Replicant_to_Android_9
347
* "Mesa":https://www.mesa3d.org/intro.html (in particular: "Gallium llvmpipe driver":https://www.mesa3d.org/llvmpipe.html)
348
* "gbm_gralloc":https://osdn.net/projects/android-x86/scm/git/external-gbm_gralloc/summary
349
* "drm-hwcomposer":https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer
350
* "Linux kernel":https://www.kernel.org/ (in particular: drm/exynos driver and "vGEM driver":https://www.phoronix.com/scan.php?page=news_item&px=DRM-vGEM-Mesa-Software)
351
* "SwiftShader":https://swiftshader.googlesource.com/SwiftShader
352
* "Ne10 library":https://github.com/projectNe10/Ne10
353
* "Neon Intrinsics":https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics
354
* "Lima":https://gitlab.freedesktop.org/lima
355 252 Denis 'GNUtoo' Carikli
356 222 dl lud
h3. "Graphics acceleration on Replicant" nlnet Grant application
357
358
|_. Project name | Graphics acceleration on Replicant |
359
|_. Website / wiki | https://redmine.replicant.us/projects/replicant/wiki/Tasks_funding#Graphics-acceleration |
360
361
Abstract: Can you explain the whole project and its expected outcome(s) in 1200 characters
362
<pre>
363
Replicant is a fully free software Android distribution which is approved by the
364
FSF. All supported devices on Replicant currently lack a free software driver
365
for their GPU. As such, OpenGL ES (GLES) rendering must be done on the CPU
366
through software rendering (SR).
367 223 dl lud
368 222 dl lud
Replicant's current renderer is both incomplete and slow. It causes essential
369
apps like web browsers to crash due to lack of GLES 2.0, and many other
370
apps run too slow to be usable.
371
372
This project aims to fix this by complementing Android's 9 graphics stack.
373
Adding a few missing components will created of a fully-free, fast and compliant
374
graphics stack.
375
376
First we will write a gralloc (graphics memory allocator) tailored for SR that
377
is compatible with drm-hwcomposer (a libre implementation of Android's Hardware
378
Composer HAL). This gralloc enables drm-hwcomposer to work with SurfaceFlinger
379
and SwiftShader, creating a stack capable of GLES 2.0 on the CPU of all Replicant
380
devices.
381
382
Afterwards we will integrate and optimize Mesa's llvmpipe SR, which offers better
383
community support than SwiftShader. As last step we will add support for the
384
Lima driver, which will bring an even faster GPU-backed GLES to at least 5
385
devices.
386
</pre> 
387
388
|_. Have you been involved with projects or organizations relevant to this project before?
389
And if so, can you tell us a bit about your contributions? | SEE TEMPLATE |
390
391
|_. Requested Amount (Between 5000 and 50000 Euros) | 50000 Euros |
392
|_. Does the project have other funding sources, both past and present? | SEE TEMPLATE |
393
394 1 Denis 'GNUtoo' Carikli
Explain what the requested budget will be used for? 
395 223 dl lud
<pre>
396 1 Denis 'GNUtoo' Carikli
The budget will only be used to fund this project through contract work.
397 223 dl lud
398
We estimate that this project should take 868 man-hours to reach full completion,
399
with 632 man-hours being enough to reach all software rendering goals, leaving only
400
the GPU rendering to be done. A detailed run-down of this estimate is available at
401
https://redmine.replicant.us/projects/replicant/wiki/Tasks_funding#Graphics-acceleration
402
403
So far we have a team of two people interested on working on this project (the
404
two authors and submitters of this application). Both can commit to the project
405
on a part-time regime (17.5 hours per week), which means that the project should
406
be fully completed in about 6 months.
407
408
We will make sure that everybody has a chance to apply for doing contract work.
409
If we take the cost of a freelance developer in the USA (75 to 150 USD
410
per hour) as a basis, to enable people living in Europe and the USA
411
to apply, we can fund between 380 and 760 man-hours with the 50000 EUR budget.
412
This should be enough to cover all work on software rendering plus the initial
413
work on GPU rendering.
414
415
As happens on all software projects, getting a precise time/effort evaluation is
416
a difficult endeavour, specially when dealing with a project that is heavy on
417
research such as this one.
418
419
If the software rendering goals are not reached when the 50000 EUR budget runs
420
out, or if the Replicant project deems it necessary to have GPU rendering, it
421
will use its existing funds to pay for contract work if no volunteers are found
422
to finish the project.
423
424
The Replicant project will also make sure that the people working on this project
425
have the necessary hardware to do it, for instance by shipping or reimbursing the
426 222 dl lud
purchase of a compatible smartphone with the Replicant project funds.
427
</pre>
428
429
Compare your own project with existing or historical efforts.
430 224 dl lud
<pre>
431
Past Replicant versions have relied on patches to the Android framework to make
432
software rendering work. These patches were quite specific for Replicant and
433
had no use elsewhere. This made them unfit for upstreaming or sharing with any
434 222 dl lud
other project.
435 224 dl lud
436
Android's Project Treble new graphics stack allows us to follow a different
437
approach this time. Instead of patching the Android framework, we will
438
implement one of the well defined Android HALs (Hardware Abstraction Layer):
439
the gralloc HAL. The end result will be a software library that can prove to be
440
useful on several projects besides Replicant (e.g. Android-x86 project) and
441
thus fit for upstreaming.
442
443
444
Furthermore, past Replicant versions relied on Google's software renderers
445
(ligAGL and libpixelflinger) for OpenGL ES support. As quite a few other
446
Google's open-source projects, these two had no community behind them and got
447
stalled as soon as Google deprecated them.
448
449
This time will we take a different approach. Although our first graphics stack
450
will rely on Google's SwiftShader renderer, we will then move our efforts into
451
Mesa. Mesa is a big community project, with hundreds of active contributors and
452
great community support. It includes the llvmpipe software renderer along with
453
new drivers in development for GPUs present on current and future Replicant
454 222 dl lud
devices. Mesa should provide a stable and maintained platform for years to come.
455
</pre>
456
457
What are significant technical challenges you expect to solve during the project, if any?
458 225 dl lud
<pre>
459
We expect to solve significant technical challenges during this project:
460
1. Implementation of the first Android gralloc library compatible with software
461
rendering.
462
2. Development of free-software benchmarks for OpenGL ES on Android, used to test
463
our optimizations to llvmpipe.
464
3. Optimization of llvmpipe by at least one order of magnitude.
465
4. Running an exynos based smartphone with fully free-software GPU graphics
466 222 dl lud
acceleration.
467
</pre>
468 229 dl lud
469
Describe the ecosystem of the project, and how you will engage with relevant actors and promote the outcomes?
470
<pre>
471
This project will re-use code from several projects such as Android,
472
drm-hwcomposer, Mesa and Lima driver. Whenever possible we will foster
473
collaboration with these projects and submit our changes upstream.
474
475
The Replicant project contributors and the FSF will supervise
476
contractors to do the work.
477
478
A blog post will announce that the Replicant project
479
has got some funding for this specific task, and that it is
480
looking for a contractor to work on it. This is to make sure
481
that everyone has equal chances in the application process.
482
483
Then the most suited contractor will be selected. Only contractors
484
that already have worked on similar tasks as part of free and open
485
source software projects will be chosen. This way we can look at
486
their existing contributions and make sure that they are able to
487
do the task before engaging with them.
488
489
The Replicant project will also make sure that the contractor has
490
or gets the hardware required to work on the task, before starting
491 1 Denis 'GNUtoo' Carikli
to work on it.
492 229 dl lud
</pre>
493 222 dl lud
494 167 dl lud
|_. Attachments | SEE TEMPLATE |