This job ad has been posted over 40 days ago! (*)
Open-Source Software Developer Internship Internship
Published at 2019-12-11 -
Viewed: 2307 times -
Internship: Open-Source Software Developer (Remote/Anywhere)
Montreal, Canada or Cambridge, UK
Collabora is pleased to offer paid internship positions for 2020 to work on Free/Libre Open Source Software upstream projects to improve software with real users.
We are a software consultancy specialising in bringing companies and the open source software community together. We combine years of open source software leadership with an understanding of the challenges that businesses, non-profits, and governments face. We bring deep technical expertise in system integration & architecture, graphics, multimedia, web engines, and communications to a number of market verticals, including mobile, IVI / automotive, set-top box / smart TV, and a range of other specialised embedded applications.
We are looking for students who are about to graduate and are ready to venture into development on a professional level.
Our ideal candidates are highly motivated to work on Free Software projects. We are keen to see existing contributions to any Free Software project related to our areas of specialisation, including participation in its community.
We do continuous selection of applicants. This means that we will review each application on a case by case basis and we will make an offer to the earliest applicants who fit our requirements for the project that they are interested in. We aim to take 2 to 3 interns per year.
Conditions of the Internship:
- you will be mentored by one or more of Collabora’s outstanding F/LOSS developers as part of one of our development teams;
- your working hours will be from 30 to 40 hours per week;
- compensation, which varies based on location and agreed hours, will be discussed during the interview process;
- you will be working from either our Cambridge office, our Montreal office, or remotely from home;
- you need to have a legal right to work in the UK or Canada if you wish to relocate to an office; and
- your start date will be any time in 2020, after you have completed your full time education.
Offered Projects (please see descriptions below):
- libfunctionfs: Write a library facilitation userspace-implemented USB gadget functions
- VKMS: Automated compositor testing with VKMS
- Panfrost: Panfrost compiler improvements
- GStreamer: Chromecast sink element in Rust
- Monado: Head tracked fish tank display
- Monado: SLAM-Jam
libfunctionfs: Write a library facilitation userspace-implemented USB gadget functions
- Linux kernel provides ~20 USB functionfs for USB gadgets. However, if a function is needed which is not provided, the user can use FunctionFS, a very special USB function which is a filesystem, and then implement their USB function in userspace using file operations to transfer data between the host and the device. Example functions which can be implemented this way are mtp or adb, because they are _not_ provided by the upstream kernel and there is little chance that they will ever be. The primary goal of the project is to design and write a C library facilitating writing such userspace-implemented USB gadget functions. The secondary goal is to develop a tool which uses the library to create binary blobs containing USB function descriptors for FunctionFS, that includes developing an extensible framework for accommodating various kinds of USB descriptors. A nice-to-have would be e.g. Python bindings for the library.
- Advanced C (not C++)
- Experience using Linux tools such as gcc, gdb
- (Some) knowledge of USB internals is a plus
VKMS: Automated compositor testing with VKMS
- VKMS is a virtual kernel modesetting driver which provides a KMS driver on top of a pure software implementation. Currently, VKMS implements a fixed plane -> CRTC -> connector -> writeback pipeline, which can be used for testing the normal flow. Being a software implementation, we could enhance VKMS (perhaps through user-supplied eBPF hooks, or just through proxying requests similarly to the DisplayLink EVDI driver) to allow userspace to trigger particular error or corner cases inside the driver, allowing automated testing of compositors (e.g. Weston) responses to error cases from the driver.
- Advanced C
- Linux kernel basics
- A rough understanding of the graphics pipeline
Panfrost: Panfrost compiler improvements
- The student would work on the compiler for the Midgard or Bifrost architecture to improve the functionality or performance of a production compiler, dealing with the real world rewards challenges of compiling for irregular graphics architectures. Depending on the student’s interest, this project could involve optimisation or adding new features. The exact project will be agreed during the interview stage. For reference, this is one of the potential projects which could be done: "A student will implement half-float (fp16) and short integer (int16) data types in the production Midgard compiler, in addition to single-precision floats and 32-bit integers. The student will extend Midgard’s machine intermediate representation and register allocation algorithm to respect differing type sizes, effectively using the subdivided register space to reduce register spilling and improve performance. The project’s completion will be marked by merging the student’s code to upstream Mesa."
- Advanced C
- Passed a course like University of Toronto’s “CSC467: Compilers and Interpreters” or equivalent, or able to demonstrate prior experience with compilers
GStreamer: Chromecast sink element in Rust
- Being able to stream to a Chromcast device would be a great addition to GStreamer. First step would be to create a httpserversink element which could be used to expose any stream using a self-served HTTP server. The logic would be very similar to the http-launch tool but with the server wrapped inside a new element rather than an application. This element would probably use Hyper as http crate. Then this element would be wrapped in a new chromecastsink bin which would be using a crate such as rust-cast to export the http stream to a Chromcast device.
- Experience with Rust
- High level knowledge of multimedia workings
- Experience with networking
Monado: Head tracked fish tank display
- The core OpenXR 1.0 specification supports stereo VR headsets and monoscopic handheld displays like smartphones or tablets which are supposed to be used as a "magic window" into a VR world or for AR purposes; for this purpose the device’s orientation and position is tracked to provide users the ability to move the "window" view by moving the display device. A further use of monoscopic displays is the "fish tank" configuration with a fixed display like a TV and instead the head position of the user is tracked, to render the content behind the magic window from the right perspective. (Example here). For this project, the student will add support in Monado for tracking a face, figure out the relation of the face/eyes to the a monitor and calculate fov values. The focus of this is not making creating production ready code that in 100% of the cases, but the integration of the code into Monado. The small test application hello_xr will need changes to add better support for monoscopic fish tank views, like improving the scene setup. Depending on progress, the student can modify one or all of Godot, Blender and Unreal to support monoscopic fish tank mode.
- Integrated face-tracking code in Monado that transforms the data and pipes it up to the application.
- Advanced C
- Some basic linear algebra knowledge.
- Some computer vision experience would be helpful. OpenCV provides some required functionality.
- The WMR and Oculus Rift S PC VR headsets only support camera based inside out tracking as their positional tracking system. We want to support these headsets in our Monado runtime, but to do so we need an implementation of simultaneous localization and mapping (SLAM) tracking. Several open source implementations exist, but mostly optimized for robotics/research, not for real time VR headset tracking. The task would be to design and run a comparison of MIT licensed SLAM implementations such as Maplab, OpenVSLAM or Kimera, and perhaps others. If time permits, use a HMD with cameras or put a camera on a headset and integrate into a complete solution.
- A report detailing the performance characteristics of the various SLAM, detailing accuracy, latency, CPU usage, ease of portability and integrability.
- A driver integrating one integrating one of the SLAM tracker into Monado.
- Advanced C & C++
- Experience with multimedia on Linux (UVC, V4L2)
- Experience in DSP/signal filtering (e.g. kalman) for the complete solution would be a bonus
You are welcome to propose your own topic in one of the areas mentioned above. If you do, please include details and a timeline in your application.