https://wiki.qemu.org/api.php?action=feedcontributions&user=Stefanha&feedformat=atomQEMU - User contributions [en]2024-03-28T19:50:04ZUser contributionsMediaWiki 1.39.1https://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11679Google Summer of Code 20242024-02-21T18:00:49Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: QEMU was not accepted into GSoC 2024. If you would like to work with us on these project ideas outside of GSoC and without funding, please contact the mentors for the project idea you are interested in. We hope to participate in GSoC again next year.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/RISCVVectorFrontendOptimization}}<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
{{:Internships/ProjectIdeas/PackedShadowVirtqueue}}<br />
{{:Internships/ProjectIdeas/VhostUserMemoryIsolation}}<br />
{{:Internships/ProjectIdeas/NitroEnclaves}}<br />
{{:Internships/ProjectIdeas/TCGBinaryTracing}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/PackedShadowVirtqueue&diff=11657Internships/ProjectIdeas/PackedShadowVirtqueue2024-02-12T14:57:42Z<p>Stefanha: /* Add packed virtqueue to Shadow Virtqueue */</p>
<hr />
<div>=== Add packed virtqueue to Shadow Virtqueue ===<br />
'''Summary:''' Add the packed virtqueue format support to QEMU's Shadow Virtqueue.<br />
<br />
To live migrate a guest with a passthrough device,<br />
QEMU needs a way to know which memory the device modifies so it<br />
is able to migrate it every time it is modified. Otherwise the migrated<br />
guest would resume with outdated memory contents after live<br />
migration.<br />
<br />
This is especially hard with passthrough hardware devices, as<br />
transports like PCI impose a few security and performance challenges.<br />
As a method to overcome this for VIRTIO devices, QEMU can offer an<br />
emulated virtqueue to the device, called a Shadow Virtqueue (SVQ),<br />
instead of allowing the device to communicate directly with the guest.<br />
SVQ will then forward the writes to the guest, being the effective<br />
writer in the guest memory and knowing when a portion of it needs to<br />
be migrated again.<br />
<br />
Compared with the original Split Virtqueue layout already supported by Shadow<br />
Virtqueues, the Packed Virtqueue layout is a more compact representation that uses<br />
less memory size and allows both devices and drivers to exchange the<br />
same amount of information with fewer memory operations.<br />
<br />
The task is to complete the packed virtqueue support for SVQ, using<br />
the kernel VIRTIO ring driver as a reference. There is already a setup<br />
that can be used to test the changes.<br />
<br />
'''Internship tasks:'''<br />
* Build the hands on blogs scenarios as development environment.<br />
* Understand (in a very high level) the virtqueue handling code, using the virtqueues blogs, the code from QEMU hw/virtio/virtio.c and the kernel drivers/virtio/virtio_ring.c.<br />
* Develop the basic code of the packet virtqueue in vhost-shadow-virtqueue.c, ignoring features like indirect.<br />
* Add event_idx code.<br />
* If there is bandwidth, add the corresponding device code to kernel's drivers/vhost/vringh, following the code of QEMU's device at hw/virtio/virtio.c.<br />
<br />
'''Links:'''<br />
* https://www.redhat.com/en/blog/hands-vdpa-what-do-you-do-when-you-aint-got-hardware-part-1<br />
* https://www.redhat.com/en/blog/hands-vdpa-what-do-you-do-when-you-aint-got-hardware-part-2<br />
* https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone<br />
* https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels<br />
* https://www.redhat.com/en/blog/packed-virtqueue-how-reduce-overhead-virtio<br />
* [https://www.youtube.com/watch?v=x9ARoNVzS04 vDPA-net live migration with Shadow Virtqueue (video)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c#L175 vhost-shadow-virtqueue.c source code]<br />
<br />
'''Details:'''<br />
* Project size: 180 hrs<br />
* Skill level: Intermediate<br />
* Language: C<br />
* Mentors: Eugenio Perez Martin <eperezma@redhat.com>, Stefano Garzarella <sgarzare@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/GStreamerVhostDeviceSound&diff=11656Internships/ProjectIdeas/GStreamerVhostDeviceSound2024-02-12T14:56:43Z<p>Stefanha: /* GStreamer Backend for vhost-device-sound */</p>
<hr />
<div>=== GStreamer Backend for vhost-device-sound ===<br />
<br />
'''Summary:'''<br />
Implement a GStreamer audio backend in rust-vmm's vhost-device-sound crate.<br />
<br />
'''Project Description:'''<br />
<br />
virtio-sound device emulation has recently been developed in the Rust [https://github.com/rust-vmm/vhost-device vhost-device-sound]<br />
crate. The crate currently contains audio backends for the ALSA and PipeWire sound APIs. The aim of this project is to build a new [https://gstreamer.freedesktop.org/documentation/?gi-language=c GStreamer] audio backend.<br />
<br />
Audio backends are written by implementing the [https://github.com/rust-vmm/vhost-device/blob/b113dc6b288ff2b75968e245a716dc7e1436aec1/vhost-device-sound/src/audio_backends.rs#L20 AudioBackend trait]. Refer to [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/alsa.rs alsa.rs]<br />
and [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/pipewire.rs pipewire.rs] for examples of existing backends. The [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L174 Stream] and [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L242 Buffer] structs are used to transfer audio samples between the virtio-sound device and the sound API (e.g. GStreamer).<br />
<br />
The backend should be implemented using the [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]. Mono and stereo playback and capture should be supported. The GStreamer pipelines for playback and capture will be hardcoded and only Linux needs to be supported.<br />
<br />
'''Application Phase Tasks:'''<br />
<br />
* Familiarize yourself with the vhost-device-sound crate's AudioBackend trait and Stream and Buffer structs.<br />
* Familiarize yourself with the GStreamer Rust bindings.<br />
<br />
'''Internship Tasks:'''<br />
<br />
* Write a skeleton for the GStreamer audio backend in the vhost-device-sound crate. Reviewing how the ALSA and PipeWire backends work is a helpful guide.<br />
* Implement playback functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement capture functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement automated tests with cargo test.<br />
* Test the implementation with QEMU, which can act as a vhost-user frontend.<br />
* As a stretch goal, contribute to the rust-vmm/vhost-device repo by [https://github.com/rust-vmm/vhost-device/issues fixing issues].<br />
<br />
'''Links:'''<br />
<br />
* [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/ vhost-device-sound crate]<br />
* [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]<br />
<br />
'''Details:'''<br />
* Project Size: 180 hrs<br />
* Skill level: intermediate<br />
* Language: Rust<br />
* Mentors: Dorinda Bassey <dbassey@redhat.com>, Matias Ezequiel Vara Larsen <mvaralar@redhat.com><br />
* Suggested by: Dorinda Bassey, Matias Ezequiel Vara Larsen</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VhostUserMemoryIsolation&diff=11646Internships/ProjectIdeas/VhostUserMemoryIsolation2024-02-01T15:37:58Z<p>Stefanha: /* vhost-user memory isolation */</p>
<hr />
<div>=== vhost-user memory isolation ===<br />
<br />
'''Summary:''' Add a new mode for vhost-user devices that does not expose guest RAM as shared memory.<br />
<br />
vhost-user enables VIRTIO devices to be implemented as separate processes outside of QEMU. This allows device emulation code to be written in any programming language, sharing of device emulation code with other emulators besides QEMU, and complex device implementations that would not fit well into the QEMU process. vhost-user achieves good performance by directly accessing guest RAM through shared memory. Exposing guest RAM is not always desirable for security reasons and is sometimes not possible due to lack of host platform support. This project will add an alternative mode for vhost-user devices where guest RAM is not exposed.<br />
<br />
Today, QEMU configures the guest in such a way that the vhost-user device is directly notified when I/O requests are ready for processing by the device. Similarly, when the vhost-user device completes I/O requests, it directly notifies the guest. The vhost-user device has full access to guest RAM via shared memory in order to transfer data buffers while processing I/O requests. This project will add a mode where QEMU intercepts I/O requests, copies data buffers between guest RAM and a vhost-user isolated memory area that the vhost-user device can access, and then forwards the notifications between the guest and the vhost-user device.<br />
<br />
This approach of intercepting I/O requests is already being used in certain live migration scenarios and is called Shadow Virtqueue. The project will involve reusing the Shadow Virtqueue implementation and integrating it into the vhost-user code. It is important that existing vhost-user devices work with memory isolation and no vhost-user protocol changes are required.<br />
<br />
You will gain experience with QEMU internals, VIRTIO, and vhost-user.<br />
<br />
'''Internship tasks:'''<br />
* Add a bool "memory-isolation" qdev property to QEMU's vhost-user devices.<br />
* Modify hw/virtio/vhost-user.c to intercept and forward the vhost-user callfd and kickfd eventfds when memory isolation is enabled.<br />
* Manage an area of memory where I/O requests will be copied.<br />
* Integrate the existing Shadow Virtqueue (SVQ) code into hw/virtio/vhost-user.c so that vhost-user devices see the SVQ instead of the guest's virtqueue.<br />
* Extend tests/qtest/vhost-user-test.c to run with memory-isolation=on, proving that the feature works.<br />
<br />
'''Links:'''<br />
* [https://kvm-forum.qemu.org/2023/vDPA_sw_lm_-_KVM2023_6Ix6R5i.pdf vDPA-net Live Migration with Shadow VirtQueue (PDF)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/master/docs/interop/vhost-user.rst vhost-user protocol]<br />
* [https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-270006 Virtqueue description in the VIRTIO specification]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-user.c vhost-user.c]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c vhost-shadow-virtqueue.c]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Stefano Garzarella <sgarzare@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Eugenio Perez Martin <eperezma@redhat.com>, Hanna Czenczek <hreitz@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VhostUserMemoryIsolation&diff=11645Internships/ProjectIdeas/VhostUserMemoryIsolation2024-02-01T14:35:40Z<p>Stefanha: /* vhost-user memory isolation */</p>
<hr />
<div>=== vhost-user memory isolation ===<br />
<br />
'''Summary:''' Add a new mode for vhost-user devices that does not expose guest RAM as shared memory.<br />
<br />
vhost-user enables VIRTIO devices to be implemented as separate processes outside of QEMU. This allows device emulation code to be written in any programming language, sharing of device emulation code with other emulators besides QEMU, and complex device implementations that would not fit well into the QEMU process. vhost-user achieves good performance by directly accessing guest RAM through shared memory. Exposing guest RAM is not always desirable for security reasons and is sometimes not possible due to lack of host platform support. This project will add an alternative mode for vhost-user devices where guest RAM is not exposed.<br />
<br />
Today, QEMU configures the guest in such a way that the vhost-user device is directly notified when I/O requests are ready for processing by the device. Similarly, when the vhost-user device completes I/O requests, it directly notifies the guest. The vhost-user device has full access to guest RAM via shared memory in order to transfer data buffers while processing I/O requests. This project will add a mode where QEMU intercepts I/O requests, copies data buffers between guest RAM and a vhost-user isolated memory area that the vhost-user device can access, and then forwards the notifications between the guest and the vhost-user device.<br />
<br />
This approach of intercepting I/O requests is already being used in certain live migration scenarios and is called Shadow Virtqueue. The project will involve reusing the Shadow Virtqueue implementation and integrating it into the vhost-user code. It is important that existing vhost-user devices work with memory isolation and no vhost-user protocol changes are required.<br />
<br />
You will gain experience with QEMU internals, VIRTIO, and vhost-user.<br />
<br />
'''Internship tasks:'''<br />
* Add a bool "memory-isolation" qdev property to QEMU's vhost-user devices.<br />
* Modify hw/virtio/vhost-user.c to intercept and forward the vhost-user callfd and kickfd eventfds when memory isolation is enabled.<br />
* Manage an area of memory where I/O requests will be copied.<br />
* Integrate the existing Shadow Virtqueue (SVQ) code into hw/virtio/vhost-user.c so that vhost-user devices see the SVQ instead of the guest's virtqueue.<br />
* Extend tests/qtest/vhost-user-test.c to run with memory-isolation=on, proving that the feature works.<br />
<br />
'''Links:'''<br />
* [https://kvm-forum.qemu.org/2023/vDPA_sw_lm_-_KVM2023_6Ix6R5i.pdf vDPA-net Live Migration with Shadow VirtQueue (PDF)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/master/docs/interop/vhost-user.rst vhost-user protocol]<br />
* [https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-270006 Virtqueue description in the VIRTIO specification]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-user.c vhost-user.c]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c vhost-shadow-virtqueue.c]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Stefano Garzarella <sgarzare@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>, Eugenio Perez Martin <eperezma@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11644Google Summer of Code 20242024-01-31T14:36:23Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/RISCVVectorFrontendOptimization}}<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
{{:Internships/ProjectIdeas/PackedShadowVirtqueue}}<br />
{{:Internships/ProjectIdeas/VhostUserMemoryIsolation}}<br />
{{:Internships/ProjectIdeas/NitroEnclaves}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/RISCVVectorFrontendOptimization&diff=11643Internships/ProjectIdeas/RISCVVectorFrontendOptimization2024-01-31T14:35:56Z<p>Stefanha: </p>
<hr />
<div>=== RISC-V Vector TCG Frontend Optimization ===<br />
<br />
'''Summary:''' Improve QEMU's performance on RISC-V vector instructions.<br />
<br />
The RISC-V vector extension has been implemented in QEMU,<br />
but we have some performance pathologies mapping it to existing TCG<br />
backends. This project aims to improve the performance of the<br />
RISC-V vector ISA's mappings to QEMU TCG just-in-time compiler.<br />
<br />
The RISC-V TCG frontend (ie, decoding RISC-V instructions<br />
and emitting TCG calls to emulate them) has some inefficient mappings to<br />
TCG, which results in binaries that have vector instructions frequently<br />
performing worse than those without, sometimes even up to 10x slower. <br />
This causes various headaches for users, including running toolchain<br />
regressions and doing distro work. This project's aim would be to bring<br />
the performance of vectorized RISC-V code to a similar level as the<br />
corresponding scalar code.<br />
<br />
This will definitely require changing the RISC-V TCG frontend. It's<br />
likely there is some remaining optimization work that can be done<br />
without adding TCG primitives, but it may be necessary to do some core<br />
TCG work in order to improve performance sufficiently.<br />
<br />
'''Internship tasks:'''<br />
<br />
''TODO''<br />
<br />
'''Links:'''<br />
* [https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc RISC-V "V" Vector Extension specification]<br />
* [https://gitlab.com/qemu-project/qemu/-/tree/99d6a32469debf1a48921125879b614d15acfb7a/target/riscv QEMU RISC-V TCG frontend]<br />
* https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04495.html<br />
<br />
'''Details'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C, RISC-V assembly<br />
* Mentors: Palmer Dabbelt <palmer@dabbelt.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/RISCVVectorFrontendOptimization&diff=11642Internships/ProjectIdeas/RISCVVectorFrontendOptimization2024-01-31T14:32:30Z<p>Stefanha: /* RISC-V Vector TCG Frontend Optimization */</p>
<hr />
<div>=== RISC-V Vector TCG Frontend Optimization ===<br />
<br />
'''Summary:''' Improve QEMU's performance on RISC-V vector instructions.<br />
<br />
The RISC-V vector extension has been implemented in QEMU,<br />
but we have some performance pathologies mapping it to existing TCG<br />
backends. This project aims to improve the performance of the<br />
RISC-V vector ISA's mappings to QEMU TCG just-in-time compiler.<br />
<br />
The RISC-V TCG frontend (ie, decoding RISC-V instructions<br />
and emitting TCG calls to emulate them) has some inefficient mappings to<br />
TCG, which results in binaries that have vector instructions frequently<br />
performing worse than those without, sometimes even up to 10x slower. <br />
This causes various headaches for users, including running toolchain<br />
regressions and doing distro work. This project's aim would be to bring<br />
the performance of vectorized RISC-V code to a similar level as the<br />
corresponding scalar code.<br />
<br />
This will definitely require changing the RISC-V TCG frontend. It's<br />
likely there is some remaining optimization work that can be done<br />
without adding TCG primitives, but it may be necessary to do some core<br />
TCG work in order to improve performance sufficiently.<br />
<br />
'''Internship tasks:'''<br />
<br />
''TODO''<br />
<br />
'''Links:'''<br />
* [https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc RISC-V "V" Vector Extension specification]<br />
* https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04495.html<br />
<br />
'''Details'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C, RISC-V assembly<br />
* Mentors: Palmer Dabbelt <palmer@dabbelt.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/RISCVVectorFrontendOptimization&diff=11641Internships/ProjectIdeas/RISCVVectorFrontendOptimization2024-01-31T14:32:10Z<p>Stefanha: Created page with "=== RISC-V Vector TCG Frontend Optimization === '''Summary:''' Improve QEMU's performance on RISC-V vector instructions. The RISC-V vector extension has been implemented in QEMU, but we have some performance pathologies mapping it to existing TCG backends. This project aims to improve the performance of the RISC-V vector ISA's mappings to QEMU TCG just-in-time compiler. The RISC-V TCG frontend (ie, decoding RISC-V instructions and emitting TCG calls to emulate them)..."</p>
<hr />
<div>=== RISC-V Vector TCG Frontend Optimization ===<br />
<br />
'''Summary:''' Improve QEMU's performance on RISC-V vector instructions.<br />
<br />
The RISC-V vector extension has been implemented in QEMU,<br />
but we have some performance pathologies mapping it to existing TCG<br />
backends. This project aims to improve the performance of the<br />
RISC-V vector ISA's mappings to QEMU TCG just-in-time compiler.<br />
<br />
The RISC-V TCG frontend (ie, decoding RISC-V instructions<br />
and emitting TCG calls to emulate them) has some inefficient mappings to<br />
TCG, which results in binaries that have vector instructions frequently<br />
performing worse than those without, sometimes even up to 10x slower. <br />
This causes various headaches for users, including running toolchain<br />
regressions and doing distro work. This project's aim would be to bring<br />
the performance of vectorized RISC-V code to a similar level as the<br />
corresponding scalar code.<br />
<br />
This will definitely require changing the RISC-V TCG frontend. It's<br />
likely there is some remaining optimization work that can be done<br />
without adding TCG primitives, but it may be necessary to do some core<br />
TCG work in order to improve performance sufficiently.<br />
<br />
'''Internship tasks:'''<br />
''TODO''<br />
<br />
'''Links:'''<br />
* [https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc RISC-V "V" Vector Extension]<br />
* https://lists.gnu.org/archive/html/qemu-devel/2023-07/msg04495.html<br />
<br />
'''Details'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C, RISC-V assembly<br />
* Mentors: Palmer Dabbelt <palmer@dabbelt.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11639Google Summer of Code 20242024-01-30T20:13:26Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
{{:Internships/ProjectIdeas/PackedShadowVirtqueue}}<br />
{{:Internships/ProjectIdeas/VhostUserMemoryIsolation}}<br />
{{:Internships/ProjectIdeas/NitroEnclaves}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/NitroEnclaves&diff=11638Internships/ProjectIdeas/NitroEnclaves2024-01-30T20:13:01Z<p>Stefanha: Created page with "=== Implement -M nitro-enclave in QEMU === '''Summary:''' AWS EC2 provides the ability to create an isolated sibling VM context from within a VM. This project implements the machine model and input data format parsing needed to run these sibling VMs stand alone in QEMU. [https://aws.amazon.com/ec2/nitro/nitro-enclaves/ Nitro Enclaves] are the first widely adopted implementation of hypervisor assisted compute isolation. Similar to technologies like Intel SGX, it allows..."</p>
<hr />
<div>=== Implement -M nitro-enclave in QEMU ===<br />
<br />
'''Summary:''' AWS EC2 provides the ability to create an isolated<br />
sibling VM context from within a VM. This project implements the machine<br />
model and input data format parsing needed to run these sibling VMs<br />
stand alone in QEMU.<br />
<br />
[https://aws.amazon.com/ec2/nitro/nitro-enclaves/ Nitro Enclaves] are the first widely adopted implementation of hypervisor<br />
assisted compute isolation. Similar to technologies like Intel SGX, it allows<br />
to spawn a separate context that is inaccessible by the parent Operating<br />
System. This is implemented by "giving up" resources of the parent VM<br />
(CPU cores, memory) to the hypervisor which then spawns a second vmm to<br />
execute a completely separate virtual machine. That new VM only has a<br />
vsock communication channel to the parent and has a built-in lightweight<br />
[https://en.wikipedia.org/wiki/Trusted_Platform_Module Trusted Platform Module] called NSM.<br />
<br />
One big challenge with Nitro Enclaves is that due to its roots in<br />
security, there are very few debugging / introspection capabilities.<br />
That makes OS bringup, debugging and bootstrapping very difficult.<br />
Having a local development and test environment that looks like an Enclave, but is<br />
100% controlled by the developer and introspectable would make life a<br />
lot easier for everyone working on them. It also may pave the way to see<br />
Nitro Enclaves adopted in VM environments outside of EC2.<br />
<br />
This project will consist of adding a new machine model to QEMU that<br />
mimics a Nitro Enclave environment, including NSM, the vsock<br />
communication channel and building firmware which loads the special<br />
"EIF" file format which contains kernel, initramfs and metadata from a<br />
-kernel image.<br />
<br />
If the student finishes early, we can then proceed to implement the<br />
Nitro Enclaves parent driver in QEMU as well to create a full QEMU-only<br />
Nitro Enclaves environment.<br />
<br />
'''Tasks:'''<br />
* Implement a device model for the NSM device (link to spec and driver code below)<br />
* Implement a new machine model (-M nitro-enclave)<br />
* Implement firmware for the new machine model that implements EIF parsing<br />
* Add tests for the NSM device<br />
* Add integration test for the machine model executing an actual EIF payload<br />
<br />
'''Links:'''<br />
* https://aws.amazon.com/ec2/nitro/nitro-enclaves/<br />
* https://lore.kernel.org/lkml/20200921121732.44291-10-andraprs@amazon.com/T/<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/misc/nsm.c NSM Linux driver code]<br />
* [https://github.com/aws/aws-nitro-enclaves-image-format EIF file format]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate - advanced (some understanding of QEMU machine modeling would be good)<br />
* Language: C<br />
* Mentor: Alexander Graf (OFTC: agraf, Email: graf@amazon.com)</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11637Google Summer of Code 20242024-01-30T19:30:21Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
{{:Internships/ProjectIdeas/PackedShadowVirtqueue}}<br />
{{:Internships/ProjectIdeas/VhostUserMemoryIsolation}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VhostUserMemoryIsolation&diff=11636Internships/ProjectIdeas/VhostUserMemoryIsolation2024-01-30T19:29:14Z<p>Stefanha: Created page with "=== vhost-user memory isolation === '''Summary:''' Add a new mode for vhost-user devices that does not expose guest RAM as shared memory. vhost-user enables VIRTIO devices to be implemented as separate processes outside of QEMU. This allows device emulation code to be written in any programming language, sharing of device emulation code with other emulators besides QEMU, and complex device implementations that would not fit well into the QEMU process. vhost-user achie..."</p>
<hr />
<div>=== vhost-user memory isolation ===<br />
<br />
'''Summary:''' Add a new mode for vhost-user devices that does not expose guest RAM as shared memory.<br />
<br />
vhost-user enables VIRTIO devices to be implemented as separate processes outside of QEMU. This allows device emulation code to be written in any programming language, sharing of device emulation code with other emulators besides QEMU, and complex device implementations that would not fit well into the QEMU process. vhost-user achieves good performance by directly accessing guest RAM through shared memory. Exposing guest RAM is not always desirable for security reasons and is sometimes not possible due to lack of host platform support. This project will add an alternative mode for vhost-user devices where guest RAM is not exposed.<br />
<br />
Today, QEMU configures the guest in such a way that the vhost-user device is directly notified when I/O requests are ready for processing by the device. Similarly, when the vhost-user device completes I/O requests, it directly notifies the guest. The vhost-user device has full access to guest RAM via shared memory in order to transfer data buffers while processing I/O requests. This project will add a mode where QEMU intercepts I/O requests, copies data buffers between guest RAM and a vhost-user isolated memory area that the vhost-user device can access, and then forwards the notifications between the guest and the vhost-user device.<br />
<br />
This approach of intercepting I/O requests is already being used in certain live migration scenarios and is called Shadow Virtqueue. The project will involve reusing the Shadow Virtqueue implementation and integrating it into the vhost-user code. It is important that existing vhost-user devices work with memory isolation and no vhost-user protocol changes are required.<br />
<br />
You will gain experience with QEMU internals, VIRTIO, and vhost-user.<br />
<br />
'''Internship tasks:'''<br />
* Add a bool "memory-isolation" qdev property to QEMU's vhost-user devices.<br />
* Modify hw/virtio/vhost-user.c to intercept and forward the vhost-user callfd and kickfd eventfds when memory isolation is enabled.<br />
* Manage an area of memory where I/O requests will be copied.<br />
* Integrate the existing Shadow Virtqueue (SVQ) code into hw/virtio/vhost-user.c so that vhost-user devices see the SVQ instead of the guest's virtqueue.<br />
* Extend tests/qtest/vhost-user-test.c to run with memory-isolation=on, proving that the feature works.<br />
<br />
'''Links:'''<br />
* [https://kvm-forum.qemu.org/2023/vDPA_sw_lm_-_KVM2023_6Ix6R5i.pdf vDPA-net Live Migration with Shadow VirtQueue (PDF)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/master/docs/interop/vhost-user.rst vhost-user protocol]<br />
* [https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-270006 Virtqueue description in the VIRTIO specification]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-user.c vhost-user.c]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c vhost-shadow-virtqueue.c]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Stefano Garzarella <sgarzare@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/PackedShadowVirtqueue&diff=11629Internships/ProjectIdeas/PackedShadowVirtqueue2024-01-29T19:36:25Z<p>Stefanha: </p>
<hr />
<div>=== Add packed virtqueue to Shadow Virtqueue ===<br />
'''Summary:''' Add the packed virtqueue format support to QEMU's Shadow Virtqueue.<br />
<br />
To live migrate a guest with a passthrough device,<br />
QEMU needs a way to know which memory the device modifies so it<br />
is able to migrate it every time it is modified. Otherwise the migrated<br />
guest would resume with outdated memory contents after live<br />
migration.<br />
<br />
This is especially hard with passthrough hardware devices, as<br />
transports like PCI impose a few security and performance challenges.<br />
As a method to overcome this for VIRTIO devices, QEMU can offer an<br />
emulated virtqueue to the device, called a Shadow Virtqueue (SVQ),<br />
instead of allowing the device to communicate directly with the guest.<br />
SVQ will then forward the writes to the guest, being the effective<br />
writer in the guest memory and knowing when a portion of it needs to<br />
be migrated again.<br />
<br />
Compared with the original Split Virtqueue layout already supported by Shadow<br />
Virtqueues, the Packed Virtqueue layout is a more compact representation that uses<br />
less memory size and allows both devices and drivers to exchange the<br />
same amount of information with fewer memory operations.<br />
<br />
The task is to complete the packed virtqueue support for SVQ, using<br />
the kernel VIRTIO ring driver as a reference. There is already a setup<br />
that can be used to test the changes.<br />
<br />
'''Internship tasks:'''<br />
* ''TODO''<br />
<br />
'''Links:'''<br />
* https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone<br />
* https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels<br />
* https://www.redhat.com/en/blog/packed-virtqueue-how-reduce-overhead-virtio<br />
* [https://www.youtube.com/watch?v=x9ARoNVzS04 vDPA-net live migration with Shadow Virtqueue (video)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c#L175 vhost-shadow-virtqueue.c source code]<br />
<br />
'''Details:'''<br />
* Project size: ''TODO''<br />
* Skill level: Intermediate<br />
* Language: C<br />
* Mentors: Eugenio Perez Martin <eperezma@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11628Google Summer of Code 20242024-01-29T19:35:11Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
{{:Internships/ProjectIdeas/PackedShadowVirtqueue}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/PackedShadowVirtqueue&diff=11627Internships/ProjectIdeas/PackedShadowVirtqueue2024-01-29T19:34:35Z<p>Stefanha: Created page with "=== Add packed virtqueue to Shadow Virtqueue === '''Summary:''' Add the packed virtqueue format support to QEMU's Shadow Virtqueue. To live migrate a guest with a passthrough device, QEMU needs a way to know which memory the device modifies so it is able to migrate it every time it is modified. Otherwise the migrated guest would resume with outdated memory contents after live migration. This is especially hard with passthrough hardware devices, as transports like PCI i..."</p>
<hr />
<div>=== Add packed virtqueue to Shadow Virtqueue ===<br />
'''Summary:''' Add the packed virtqueue format support to QEMU's Shadow Virtqueue.<br />
<br />
To live migrate a guest with a passthrough device,<br />
QEMU needs a way to know which memory the device modifies so it<br />
is able to migrate it every time it is modified. Otherwise the migrated<br />
guest would resume with outdated memory contents after live<br />
migration.<br />
<br />
This is especially hard with passthrough hardware devices, as<br />
transports like PCI impose a few security and performance challenges.<br />
As a method to overcome this for VIRTIO devices, QEMU can offer an<br />
emulated virtqueue to the device, called a Shadow Virtqueue (SVQ),<br />
instead of allowing the device to communicate directly with the guest.<br />
SVQ will then forward the writes to the guest, being the effective<br />
writer in the guest memory and knowing when a portion of it needs to<br />
be migrated again.<br />
<br />
Compared with the original Split Virtqueue layout already supported by Shadow<br />
Virtqueues, the Packed Virtqueue layout is a more compact representation that uses<br />
less memory size and allows both devices and drivers to exchange the<br />
same amount of information with fewer memory operations.<br />
<br />
The task is to complete the packed virtqueue support for SVQ, using<br />
the kernel VIRTIO ring driver as a reference. There is already a setup<br />
that can be used to test the changes.<br />
<br />
'''Coding period tasks:'''<br />
* ''TODO''<br />
<br />
'''Links:'''<br />
* https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone<br />
* https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels<br />
* https://www.redhat.com/en/blog/packed-virtqueue-how-reduce-overhead-virtio<br />
* [https://www.youtube.com/watch?v=x9ARoNVzS04 vDPA-net live migration with Shadow Virtqueue (video)]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/99d6a32469debf1a48921125879b614d15acfb7a/hw/virtio/vhost-shadow-virtqueue.c#L175 vhost-shadow-virtqueue.c source code]<br />
<br />
'''Details:'''<br />
* Project size: ''TODO''<br />
* Skill level: Intermediate<br />
* Language: C</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11623Google Summer of Code 20242024-01-25T20:25:16Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/GStreamerVhostDeviceSound}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/GStreamerVhostDeviceSound&diff=11622Internships/ProjectIdeas/GStreamerVhostDeviceSound2024-01-25T20:24:10Z<p>Stefanha: </p>
<hr />
<div>=== GStreamer Backend for vhost-device-sound ===<br />
<br />
'''Summary:'''<br />
Implement a GStreamer audio backend in rust-vmm's vhost-device-sound crate.<br />
<br />
'''Project Size:'''<br />
180 hrs<br />
<br />
'''Project Description:'''<br />
<br />
virtio-sound device emulation has recently been developed in the Rust [https://github.com/rust-vmm/vhost-device vhost-device-sound]<br />
crate. The crate currently contains audio backends for the ALSA and PipeWire sound APIs. The aim of this project is to build a new [https://gstreamer.freedesktop.org/documentation/?gi-language=c GStreamer] audio backend.<br />
<br />
Audio backends are written by implementing the [https://github.com/rust-vmm/vhost-device/blob/b113dc6b288ff2b75968e245a716dc7e1436aec1/vhost-device-sound/src/audio_backends.rs#L20 AudioBackend trait]. Refer to [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/alsa.rs alsa.rs]<br />
and [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/pipewire.rs pipewire.rs] for examples of existing backends. The [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L174 Stream] and [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L242 Buffer] structs are used to transfer audio samples between the virtio-sound device and the sound API (e.g. GStreamer).<br />
<br />
The backend should be implemented using the [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]. Mono and stereo playback and capture should be supported. The GStreamer pipelines for playback and capture will be hardcoded and only Linux needs to be supported.<br />
<br />
'''Application Phase Tasks:'''<br />
<br />
* Familiarize yourself with the vhost-device-sound crate's AudioBackend trait and Stream and Buffer structs.<br />
* Familiarize yourself with the GStreamer Rust bindings.<br />
<br />
'''Internship Tasks:'''<br />
<br />
* Write a skeleton for the GStreamer audio backend in the vhost-device-sound crate. Reviewing how the ALSA and PipeWire backends work is a helpful guide.<br />
* Implement playback functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement capture functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement automated tests with cargo test.<br />
* Test the implementation with QEMU, which can act as a vhost-user frontend.<br />
* As a stretch goal, contribute to the rust-vmm/vhost-device repo by [https://github.com/rust-vmm/vhost-device/issues fixing issues].<br />
<br />
'''Links:'''<br />
<br />
* [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/ vhost-device-sound crate]<br />
* [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/GStreamerVhostDeviceSound&diff=11621Internships/ProjectIdeas/GStreamerVhostDeviceSound2024-01-25T20:23:26Z<p>Stefanha: Created page with "=== GStreamer Backend for vhost-device-sound === '''Summary:''' Implement a GStreamer audio backend in rust-vmm's vhost-device-sound crate. '''Project Size:''' 180 hrs '''Project Description:''' virtio-sound device emulation has recently been developed in the Rust [https://github.com/rust-vmm/vhost-device vhost-device-sound] crate. The crate currently contains audio backends for the ALSA and PipeWire sound APIs. The aim of this project is to build a new [https://gstr..."</p>
<hr />
<div>=== GStreamer Backend for vhost-device-sound ===<br />
<br />
'''Summary:'''<br />
Implement a GStreamer audio backend in rust-vmm's vhost-device-sound crate.<br />
<br />
'''Project Size:'''<br />
180 hrs<br />
<br />
'''Project Description:'''<br />
<br />
virtio-sound device emulation has recently been developed in the Rust [https://github.com/rust-vmm/vhost-device vhost-device-sound]<br />
crate. The crate currently contains audio backends for the ALSA and PipeWire sound APIs. The aim of this project is to build a new [https://gstreamer.freedesktop.org/documentation/?gi-language=c GStreamer] audio backend.<br />
<br />
Audio backends are written by implementing the [https://github.com/rust-vmm/vhost-device/blob/b113dc6b288ff2b75968e245a716dc7e1436aec1/vhost-device-sound/src/audio_backends.rs#L20 AudioBackend trait]. Refer to [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/alsa.rs alsa.rs]<br />
and [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/audio_backends/pipewire.rs pipewire.rs] for examples of existing backends. The [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L174 Stream] and [https://github.com/rust-vmm/vhost-device/blob/6ca911eb5f6a73c534e234eedea90cf26d1d71ad/vhost-device-sound/src/stream.rs#L242 Buffer] structs are used to transfer audio samples between the virtio-sound device and the sound API (e.g. GStreamer).<br />
<br />
The backend should be implemented using the [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]. Mono and stereo playback and capture should be supported. The GStreamer pipelines for playback and capture will be hardcoded and only Linux needs to be supported.<br />
<br />
'''Application Phase Tasks:'''<br />
<br />
* Familiarize yourself with the vhost-device-sound crate's AudioBackend trait and Stream and Buffer structs.<br />
* Familiarize yourself with the GStreamer Rust bindings.<br />
<br />
'''Internship Tasks:'''<br />
<br />
* Write a skeleton for the GStreamer audio backend in the vhost-device-sound crate. Reviewing how the ALSA and PipeWire backends work is a helpful guide.<br />
* Implement playback functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement capture functionality in the GStreamer audio backend for vhost-device-sound.<br />
* Implement automated tests with '''cargo test'''.<br />
* Test the implementation with QEMU, which can act as a vhost-user frontend.<br />
* As a stretch goal, contribute to the rust-vmm/vhost-device repo by [https://github.com/rust-vmm/vhost-device/issues fixing issues].<br />
<br />
'''Links:'''<br />
<br />
* [https://github.com/rust-vmm/vhost-device/blob/main/vhost-device-sound/src/ vhost-device-sound crate]<br />
* [https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/main GStreamer Rust bindings]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2024&diff=11596Google Summer of Code 20242024-01-15T16:23:59Z<p>Stefanha: Created page with "= Introduction = QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work. '''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time befor..."</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2024]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will publish the list of accepted GSoC organizations at 18:00 UTC on February 21st. Applicants may get in touch with mentors before that date, but please don't invest too much time before accepted organizations are announced.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 21 18:00 UTC - Organizations and project ideas announced<br />
* March 18 - April 2 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 1 18:00 UTC - Accepted applicants announced<br />
* May 27 - August 26 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Planning/8.2&diff=11424Planning/8.22023-08-24T12:40:22Z<p>Stefanha: </p>
<hr />
<div>== Release Schedule ==<br />
<br />
{| border="1"<br />
| 2023-08-22<br />
| Beginning of development phase<br />
|-<br />
| 2023-11-07<br />
| [[Planning/SoftFeatureFreeze|Soft feature freeze]]. Only bug fixes after this point. All feature changes must be already in a sub maintainer tree and all pull requests from submaintainers must have been sent to the list by this date.<br />
|-<br />
| 2023-11-14<br />
| [[Planning/HardFeatureFreeze|Hard feature freeze]]. Tag rc0<br />
|-<br />
| 2023-11-21<br />
| Tag rc1<br />
|-<br />
| 2023-11-28<br />
| Tag rc2<br />
|-<br />
| 2023-12-05<br />
| Tag rc3<br />
|-<br />
| 2023-12-12<br />
| Release; or tag rc4 if needed<br />
|-<br />
| 2023-12-19<br />
| Release if we needed an rc4<br />
|}<br />
<br />
== Known issues ==<br />
<br />
Please use GitLab Issues to track release blocker bugs:<br />
<br />
https://gitlab.com/qemu-project/qemu/-/milestones/10<br />
<br />
=== Other release info ===<br />
<br />
Feel free to add non-bug information that is pertinent to the release here.<br />
<br />
== Targeted Features ==<br />
<br />
See the [[ChangeLog/8.2]] for full details.</div>Stefanhahttps://wiki.qemu.org/index.php?title=Planning/8.2&diff=11423Planning/8.22023-08-23T11:07:05Z<p>Stefanha: Created page with "== Release Schedule == {| border="1" | 2023-08-22 | Beginning of development phase |- | 2023-11-14 | Soft feature freeze. Only bug fixes after this point. All feature changes must be already in a sub maintainer tree and all pull requests from submaintainers must have been sent to the list by this date. |- | 2023-11-21 | Hard feature freeze. Tag rc0 |- | 2023-11-28 | Tag rc1 |- | 2023-12-05 | Tag rc2 |- | 20..."</p>
<hr />
<div>== Release Schedule ==<br />
<br />
{| border="1"<br />
| 2023-08-22<br />
| Beginning of development phase<br />
|-<br />
| 2023-11-14<br />
| [[Planning/SoftFeatureFreeze|Soft feature freeze]]. Only bug fixes after this point. All feature changes must be already in a sub maintainer tree and all pull requests from submaintainers must have been sent to the list by this date.<br />
|-<br />
| 2023-11-21<br />
| [[Planning/HardFeatureFreeze|Hard feature freeze]]. Tag rc0<br />
|-<br />
| 2023-11-28<br />
| Tag rc1<br />
|-<br />
| 2023-12-05<br />
| Tag rc2<br />
|-<br />
| 2023-12-12<br />
| Tag rc3<br />
|-<br />
| 2023-12-19<br />
| Release; or tag rc4 if needed<br />
|-<br />
| 2023-12-26<br />
| Release if we needed an rc4<br />
|}<br />
<br />
== Known issues ==<br />
<br />
Please use GitLab Issues to track release blocker bugs:<br />
<br />
https://gitlab.com/qemu-project/qemu/-/milestones/10<br />
<br />
=== Other release info ===<br />
<br />
Feel free to add non-bug information that is pertinent to the release here.<br />
<br />
== Targeted Features ==<br />
<br />
See the [[ChangeLog/8.2]] for full details.</div>Stefanhahttps://wiki.qemu.org/index.php?title=ChangeLog/8.2&diff=11422ChangeLog/8.22023-08-22T20:00:45Z<p>Stefanha: Created page with "== System emulation == === Removed features and incompatible changes === Consult the [https://qemu-project.gitlab.io/qemu/about/removed-features.html 'Removed features'] page for details of suggested replacement functionality. === New deprecated options and features === Consult the [https://qemu-project.gitlab.io/qemu/about/deprecated.html "Deprecated Features"] chapter of the QEMU System Emulation User's Guide for further details of the deprecations and their sugges..."</p>
<hr />
<div>== System emulation ==<br />
<br />
=== Removed features and incompatible changes ===<br />
<br />
Consult the [https://qemu-project.gitlab.io/qemu/about/removed-features.html 'Removed features'] page for details of suggested replacement functionality.<br />
<br />
=== New deprecated options and features ===<br />
<br />
Consult the [https://qemu-project.gitlab.io/qemu/about/deprecated.html "Deprecated Features"] chapter of the QEMU System Emulation User's Guide for further details of the deprecations and their suggested replacements.<br />
<br />
=== 68k ===<br />
<br />
=== Alpha ===<br />
<br />
=== Arm ===<br />
<br />
=== AVR ===<br />
<br />
=== Hexagon ===<br />
<br />
=== HPPA ===<br />
<br />
=== LoongArch ===<br />
<br />
=== Microblaze ===<br />
<br />
=== MIPS ===<br />
<br />
=== Nios2 ===<br />
<br />
=== OpenRISC ===<br />
<br />
=== PowerPC ===<br />
<br />
=== Renesas RX ===<br />
<br />
=== Renesas SH ===<br />
<br />
=== RISC-V ===<br />
==== ISA and Extensions ====<br />
==== Machines ====<br />
==== Fixes and Misc ====<br />
<br />
=== s390x ===<br />
<br />
=== SPARC ===<br />
<br />
=== Tricore ===<br />
<br />
=== x86 ===<br />
==== TCG ====<br />
<br />
=== Xtensa ===<br />
<br />
=== Device emulation and assignment ===<br />
<br />
==== ACPI / SMBIOS ====<br />
<br />
==== Audio ====<br />
<br />
==== Block devices ====<br />
<br />
==== Graphics ====<br />
<br />
==== I2C ====<br />
<br />
==== Input devices ====<br />
<br />
==== IPMI ====<br />
<br />
==== Multi-process QEMU ====<br />
<br />
==== Network devices ====<br />
<br />
==== NVDIMM ====<br />
<br />
==== NVMe ====<br />
<br />
==== PCI/PCIe ====<br />
<br />
==== SCSI ====<br />
<br />
==== SD card ====<br />
<br />
==== SMBIOS ====<br />
<br />
==== TPM ====<br />
<br />
==== USB ====<br />
<br />
==== VFIO ====<br />
<br />
==== virtio ====<br />
<br />
==== vDPA ====<br />
<br />
==== Xen ====<br />
<br />
==== fw_cfg ====<br />
<br />
==== 9pfs ====<br />
<br />
==== virtiofs ====<br />
<br />
==== Semihosting ====<br />
<br />
=== Audio ===<br />
<br />
=== Character devices ===<br />
<br />
=== Crypto subsystem ===<br />
<br />
=== Authorization subsystem ===<br />
<br />
=== GUI ===<br />
<br />
=== GDBStub ===<br />
<br />
=== TCG Plugins ===<br />
<br />
=== Host support ===<br />
<br />
=== Memory backends ===<br />
<br />
=== Migration ===<br />
<br />
=== Monitor ===<br />
<br />
==== QMP ====<br />
<br />
==== HMP ====<br />
<br />
=== Network ===<br />
<br />
=== Block device backends and tools ===<br />
<br />
=== Tracing ===<br />
<br />
=== Semihosting ===<br />
<br />
=== Miscellaneous ===<br />
<br />
== User-mode emulation ==<br />
=== runtime ===<br />
<br />
=== binfmt_misc ===<br />
<br />
=== armhf ===<br />
<br />
=== Hexagon ===<br />
<br />
=== LoongArch ===<br />
<br />
=== Nios2 ===<br />
<br />
=== HPPA ===<br />
<br />
=== s390 ===<br />
<br />
=== x86 ===<br />
<br />
=== Xtensa ===<br />
<br />
== TCG backends ==<br />
<br />
=== RISC-V ===<br />
<br />
== Guest agent ==<br />
<br />
== Build Information ==<br />
<br />
=== Build Dependencies ===<br />
<br />
=== Windows ===<br />
<br />
=== Testing and CI ===<br />
<br />
== Known issues ==<br />
<br />
* See [[Planning/8.2]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11254Google Summer of Code 20232023-03-27T14:17:30Z<p>Stefanha: /* Application Process */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is participating in [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Applications are open from March 20 to April 4th. Potential applicants may get in touch with mentors to discuss project ideas before the application period begins.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Contribution task ===<br />
<br />
Once you have submitted your proposal PDF, let your mentor know and request a contribution task. The task will be a real bug or small feature that should not take more than 1 or 2 days to complete. This will allow you to demonstrate your skills in a realistic setting. Your mentor will provide you the details and help you with any questions.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* April 21 - Contribution task deadline<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
{{:Internships/ProjectIdeas/VirtiofsdSandboxingTool}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11253Google Summer of Code 20232023-03-27T14:06:34Z<p>Stefanha: /* 2. Fill out the application form */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is participating in [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Applications are open from March 20 to April 4th. Potential applicants may get in touch with mentors to discuss project ideas before the application period begins.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Submit your proposal ===<br />
<br />
Upload your proposal PDF file to the [https://summerofcode.withgoogle.com/ Google Summer of Code website] and notify your mentor(s) so they can give you feedback. You can make changes and upload the PDF again until the application deadline. Your proposal must include the following:<br />
* Project idea (title)<br />
* Your name and email address<br />
* Outline of your solution<br />
** Do some background research by looking at source code, browsing relevant specifications, etc in order to decide how to tackle the project. Discuss any questions with your mentor. This section will explain how your solution will work.<br />
* Project schedule<br />
** Create a week-by-week schedule of the coding period. Breaking down the project into tasks and estimate how many weeks they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
* Relevant experience (programming language knowledge, hobby projects, etc)<br />
* Are you available to work with no other commitments (jobs, university, vacation, etc) for the duration of your project? If not, please give details about the working hours and dates.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
{{:Internships/ProjectIdeas/VirtiofsdSandboxingTool}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11178Google Summer of Code 20232023-02-23T00:07:38Z<p>Stefanha: /* Introduction */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is participating in [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Applications are open from March 20 to April 4th. Potential applicants may get in touch with mentors to discuss project ideas before the application period begins.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
{{:Internships/ProjectIdeas/VirtiofsdSandboxingTool}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtiofsdSandboxingTool&diff=11177Internships/ProjectIdeas/VirtiofsdSandboxingTool2023-02-21T16:47:57Z<p>Stefanha: /* A sandboxing tool for virtiofsd */</p>
<hr />
<div>=== A sandboxing tool for virtiofsd ===<br />
<br />
'''Summary:''' Create a tool that runs virtiofsd in a sandboxed environment<br />
<br />
Virtiofs is a shared file system that lets virtual machines access a directory<br />
tree on the host. Unlike existing approaches, it is designed to<br />
offer local file system semantics and performance.<br />
<br />
Currently, virtiofsd integrates the sandboxing code and the server code in a<br />
single binary. The goal is to extract that code and create an external tool that<br />
creates a sandbox environment and runs virtiofsd in it. In addition, that tool<br />
should be extended to be able to run virtiofsd in a restricted environment with Landlock.<br />
<br />
This will allow greater flexibility when integrating virtiofsd into a VMM or<br />
running it inside a container.<br />
<br />
Goals:<br />
* Understand how to setup a restricted environment using chroot, namespaces, and Landlock<br />
* Refactor virtiofsd to extract the sandbox code to its own crate<br />
* Create an external sandboxing tool for virtiofsd<br />
<br />
'''Links:'''<br />
* https://virtio-fs.gitlab.io/<br />
* https://gitlab.com/virtio-fs/virtiofsd<br />
* https://landlock.io/<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate (knowledge of Rust and C)<br />
* Language: Rust<br />
* Mentor: German Maglione <gmaglione@redhat.com>, Stefano Garzarella <sgarzare@redhat.com><br />
* Suggested by: German Maglione <gmaglione@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11176Google Summer of Code 20232023-02-21T16:47:40Z<p>Stefanha: /* Project Ideas */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
{{:Internships/ProjectIdeas/VirtiofsdSandboxingTool}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtiofsdSandboxingTool&diff=11167Internships/ProjectIdeas/VirtiofsdSandboxingTool2023-02-17T16:55:44Z<p>Stefanha: </p>
<hr />
<div>=== A sandboxing tool for virtiofsd ===<br />
<br />
''Summary:''' Create a tool that runs virtiofsd in a sandboxed environment<br />
<br />
Virtiofs is a shared file system that lets virtual machines access a directory<br />
tree on the host. Unlike existing approaches, it is designed to<br />
offer local file system semantics and performance.<br />
<br />
Currently, virtiofsd integrates the sandboxing code and the server code in a<br />
single binary. The goal is to extract that code and create an external tool that<br />
creates a sandbox environment and runs virtiofsd in it. In addition, that tool<br />
should be extended to be able to run virtiofsd in a restricted environment with Landlock.<br />
<br />
This will allow greater flexibility when integrating virtiofsd into a VMM or<br />
running it inside a container.<br />
<br />
Goals:<br />
* Understand how to setup a restricted environment using chroot, namespaces, and Landlock<br />
* Refactor virtiofsd to extract the sandbox code to its own crate<br />
* Create an external sandboxing tool for virtiofsd<br />
<br />
'''Links:'''<br />
* https://virtio-fs.gitlab.io/<br />
* https://gitlab.com/virtio-fs/virtiofsd<br />
* https://landlock.io/<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate (knowledge of Rust and C)<br />
* Language: Rust<br />
* Mentor: German Maglione <gmaglione@redhat.com>, Stefano Garzarella <sgarzare@redhat.com><br />
* Suggested by: German Maglione <gmaglione@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtiofsdSandboxingTool&diff=11166Internships/ProjectIdeas/VirtiofsdSandboxingTool2023-02-17T16:55:26Z<p>Stefanha: /* A sandboxing tool for virtiofsd */</p>
<hr />
<div>=== A sandboxing tool for virtiofsd ===<br />
<br />
''Summary:''' Create a tool that runs virtiofsd in a sandboxed environment<br />
<br />
Virtiofs is a shared file system that lets virtual machines access a directory<br />
tree on the host. Unlike existing approaches, it is designed to<br />
offer local file system semantics and performance.<br />
<br />
Currently, virtiofsd integrates the sandboxing code and the server code in a<br />
single binary. The goal is to extract that code and create an external tool that<br />
creates a sandbox environment and runs virtiofsd in it. In addition, that tool<br />
should be extended to be able to run virtiofsd in a restricted environment with landlock.<br />
<br />
This will allow greater flexibility when integrating virtiofsd into a VMM or<br />
running it inside a container.<br />
<br />
Goals:<br />
* Understand how to setup a restricted environment using chroot, namespaces, and<br />
Landlock<br />
* Refactor virtiofsd to extract the sandbox code to its own crate<br />
* Create an external sandboxing tool for virtiofsd<br />
<br />
'''Links:'''<br />
* https://virtio-fs.gitlab.io/<br />
* https://gitlab.com/virtio-fs/virtiofsd<br />
* https://landlock.io/<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate (knowledge of Rust and C)<br />
* Language: Rust<br />
* Mentor: German Maglione <gmaglione@redhat.com>, Stefano Garzarella <sgarzare@redhat.com><br />
* Suggested by: German Maglione <gmaglione@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11165Google Summer of Code 20232023-02-17T16:54:50Z<p>Stefanha: /* Project Ideas */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
{{:Internships/ProjectIdeas/VirtiofsdSandboxingTool}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtiofsdSandboxingTool&diff=11164Internships/ProjectIdeas/VirtiofsdSandboxingTool2023-02-17T16:54:29Z<p>Stefanha: Created page with "=== A sandboxing tool for virtiofsd === ''Summary:''' Create a tool that runs virtiofsd in a sandboxed environment Virtiofs is a shared file system that lets virtual machines access a directory tree on the host. Unlike existing approaches, it is designed to offer local file system semantics and performance. Currently, virtiofsd integrates the sandboxing code and the server code in a single binary. The goal is to extract that code and create an external tool that..."</p>
<hr />
<div>=== A sandboxing tool for virtiofsd ===<br />
<br />
''Summary:''' Create a tool that runs virtiofsd in a sandboxed environment<br />
<br />
Virtiofs is a shared file system that lets virtual machines access a directory<br />
tree on the host. Unlike existing approaches, it is designed to<br />
offer local file system semantics and performance.<br />
<br />
Currently, virtiofsd integrates the sandboxing code and the server code in a<br />
single binary. The goal is to extract that code and create an external tool that<br />
creates a sandbox environment and runs virtiofsd in it. In addition, that tool<br />
should be extended to be able to run virtiofsd in a restricted environment with<br />
Landlock.<br />
<br />
This will allow greater flexibility when integrating virtiofsd into a VMM or<br />
running it inside a container.<br />
<br />
Goals:<br />
* Understand how to setup a restricted environment using chroot, namespaces, and<br />
Landlock<br />
* Refactor virtiofsd to extract the sandbox code to its own crate<br />
* Create an external sandboxing tool for virtiofsd<br />
<br />
'''Links:'''<br />
* https://virtio-fs.gitlab.io/<br />
* https://gitlab.com/virtio-fs/virtiofsd<br />
* https://landlock.io/<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate (knowledge of Rust and C)<br />
* Language: Rust<br />
* Mentor: German Maglione <gmaglione@redhat.com>, Stefano Garzarella <sgarzare@redhat.com><br />
* Suggested by: German Maglione <gmaglione@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11163Google Summer of Code 20232023-02-17T16:47:47Z<p>Stefanha: /* Project Ideas */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
{{:Internships/ProjectIdeas/VsockSiblingCommunication}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VsockSiblingCommunication&diff=11162Internships/ProjectIdeas/VsockSiblingCommunication2023-02-17T16:47:16Z<p>Stefanha: Created page with "=== Sibling VM communication in vhost-user-vsock === '''Summary:''' Extend the existing vhost-user-vsock Rust application to support sibling VM communication During GSoC 2021, we developed vhost-user-vsock application in Rust. It leveraged the vhost-user protocol to emulate a virtio-vsock device in an external process. It provides the hybrid VSOCK interface over AF_UNIX introduced by Firecracker. The current implementation supports a single virtual machine (VM) per pr..."</p>
<hr />
<div>=== Sibling VM communication in vhost-user-vsock ===<br />
<br />
'''Summary:''' Extend the existing vhost-user-vsock Rust application to<br />
support sibling VM communication<br />
<br />
During GSoC 2021, we developed vhost-user-vsock application in Rust. It<br />
leveraged the vhost-user protocol to emulate a virtio-vsock device in an<br />
external process. It provides the hybrid VSOCK interface over AF_UNIX<br />
introduced by Firecracker.<br />
<br />
The current implementation supports a single virtual machine (VM) per<br />
process instance.<br />
The idea of this project is to extend the vhost-user-vsock crate<br />
available in the rust-vmm/vhost-device workspace to support multiple VMs<br />
per instance and allow communication between sibling VMs.<br />
<br />
This project will allow you to learn more about the virtio-vsock<br />
specification, rust-vmm crates, and vhost-user protocol to interface<br />
with QEMU.<br />
<br />
This work will be done in Rust, but we may need to patch the<br />
virtio-vsock driver or vsock core in Linux if we will find some issues.<br />
AF_VSOCK in Linux already supports the VMADDR_FLAG_TO_HOST flag to be<br />
used in the struct sockaddr_vm to communicate with sibling VMs.<br />
<br />
Goals:<br />
* Understand how a virtio-vsock device works<br />
* Refactor vhost-user-vsock code to allow multiple virtio-vsock device instances<br />
* Extend the vhost-user-vsock CLI<br />
* Implement sibling VM communication<br />
* (optional) Support adding new VMs at runtime<br />
<br />
'''Links:'''<br />
* [https://gitlab.com/vsock/vsock vsock info and issues]<br />
* [https://wiki.qemu.org/Features/VirtioVsock virtio-vsock QEMU wiki page]<br />
* [https://github.com/rust-vmm/vhost-device/tree/main/crates/vsock vhost-user-vsock application]<br />
* [https://summerofcode.withgoogle.com/archive/2021/projects/6126117680840704 vhost-user-vsock project @ GSoC 2021]<br />
* [https://github.com/firecracker-microvm/firecracker/blob/master/docs/vsock.md Firecracker's hybrid VSOCK]<br />
* [https://gitlab.com/qemu-project/qemu/-/blob/master/docs/interop/vhost-user.rst vhost-user protocol]<br />
* [https://lore.kernel.org/lkml/20201214161122.37717-1-andraprs@amazon.com/ VMADDR_FLAG_TO_HOST flag support in Linux]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate (knowledge of Rust and virtualization)<br />
* Language: Rust<br />
* Mentor: Stefano Garzarella <sgarzare@redhat.com><br />
** IRC: sgarzare / Matrix: @sgarzare:matrix.org<br />
* Suggested by: Stefano Garzarella <sgarzare@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11154Google Summer of Code 20232023-02-13T22:19:11Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11153Google Summer of Code 20232023-02-13T22:19:00Z<p>Stefanha: </p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
x<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11144Google Summer of Code 20232023-02-09T14:08:11Z<p>Stefanha: /* Project Ideas */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
{{:Internships/ProjectIdeas/FreeBSDUser}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/FreeBSDUser&diff=11143Internships/ProjectIdeas/FreeBSDUser2023-02-09T14:07:48Z<p>Stefanha: </p>
<hr />
<div>=== FreeBSD user emulation improvements ===<br />
<br />
'''Summary:''' Get "Hello World" compiling and running in a FreeBSD/armv7 chroot<br />
<br />
QEMU's user emulator (bsd-user) runs BSD executables. This is often used in cross-compilation environments where bsd-user enables programs for other CPU architectures to run. FreeBSD support is not yet complete in QEMU and this project will make progress towards this.<br />
<br />
Your task is to get "Hello World" compiling with clang 14.0 in a FreeBSD 13.2/armv7 jail running on FreeBSD/amd64 and the resulting "Hello World" executable should also run successfully. In order to do this, the following 35 system calls need to be added: __realpathat, __sysctl, _umtx_op, cpuset_getaffinity, execve, fcntl, fstat, fstatat,<br />
ftruncate, getcontext, getdirentries, geteuid, getpid, getrandom, getrlimit, getuid,<br />
ioctl, issetugid, lseek, madvise, minherit, mmap, mprotect, munmap, rfork, rtprio_thread,<br />
sigaction, sigaltstack, sigfastblock, sigprocmask, sysarch, thr_new, thr_self, wait4.<br />
<br />
Code for these system calls exists in Warner Losh's "blitz" git branch and consists of a few thousand lines. This code is not yet finished and cannot be merged into QEMU without additional work. Your tasks will involve:<br />
* Verify that the code achieves the goal and debug it when necessary<br />
* Build patch series (git commits) that extract just the necessary code and send them to the qemu-devel mailing list<br />
* Update the patches to address code review feedback from the mailing list<br />
<br />
Each individual commit must compile and should not break anything that was working before the<br />
commit. Unit tests need to be written for subsets of the system calls that<br />
are needed to help with the development process (or existing QEMU test cases that fail need<br />
to have that failure corrected). A plan for incremental<br />
testing as the code develops is needed.<br />
<br />
This project will expose you to FreeBSD system calls and emulation. You will also gain experience with porting and maintaining patches.<br />
<br />
'''Links:'''<br />
* [https://gitlab.com/bsdimp/qemu/-/tree/blitz Warner's "blitz" git branch]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Warner Losh <imp@bsdimp.com><br />
* Suggested by: Warner Losh <imp@bsdimp.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/FreeBSDUser&diff=11142Internships/ProjectIdeas/FreeBSDUser2023-02-09T14:05:42Z<p>Stefanha: /* FreeBSD user emulation improvements */</p>
<hr />
<div>=== FreeBSD user emulation improvements ===<br />
<br />
'''Summary:''' Get "Hello World" compiling and running in a FreeBSD/armv7 chroot<br />
<br />
QEMU's user emulator (bsd-user) runs BSD executables. This is often used in cross-compilation environments where bsd-user enables programs for other CPU architectures to run. FreeBSD support is not yet complete in QEMU and this project will make progress towards this.<br />
<br />
Your task is to get "Hello World" compiling with clang 14.0 in a FreeBSD 13.2/armv7 jail running on FreeBSD/amd64 and the resulting "Hello World" executable should also run successfully. In order to do this, the following 35 system calls need to be added: __realpathat, __sysctl, _umtx_op, cpuset_getaffinity, execve, fcntl, fstat, fstatat,<br />
ftruncate, getcontext, getdirentries, geteuid, getpid, getrandom, getrlimit, getuid,<br />
ioctl, issetugid, lseek, madvise, minherit, mmap, mprotect, munmap, rfork, rtprio_thread,<br />
sigaction, sigaltstack, sigfastblock, sigprocmask, sysarch, thr_new, thr_self, wait4.<br />
<br />
Code for these system calls exists in Warner Losh's "blitz" git branch and consists of a few thousand lines. This code is not yet finished and cannot be merged into QEMU without additional work. Your tasks will involve:<br />
* Verify that the code achieves the goal and debug it when necessary<br />
* Build patch series (git commits) that extract just the necessary code and send them to the qemu-devel mailing list<br />
* Update the patches to address code review feedback from the mailing list<br />
<br />
Each individual commit must compile and should not break anything that was working before the<br />
commit. Unit tests need to be written for subsets of the system calls that<br />
are needed to help with the development process (or existing QEMU test cases that fail need<br />
to have that failure corrected). A plan for incremental<br />
testing as the code develops is needed.<br />
<br />
This project will expose you to FreeBSD system calls and emulation. You will also gain experience with porting and maintaining patches.<br />
<br />
'''Links:'''<br />
* [https://gitlab.com/bsdimp/qemu/-/tree/blitz Warner's "blitz" git branch]<br />
<br />
'''Details:'''<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Warner Losh <imp@bsdimp.com><br />
* Suggested by: Warner Losh <imp@bsdimp.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/LibblkioZonedStorage&diff=11141Internships/ProjectIdeas/LibblkioZonedStorage2023-02-09T13:34:50Z<p>Stefanha: /* Zoned device support for libblkio */</p>
<hr />
<div>=== Zoned device support for libblkio ===<br />
<br />
'''Summary:''' Add support for zoned block devices to the libblkio library.<br />
<br />
Zoned block devices are special kinds of disks that are split into several<br />
regions called zones, where each zone may only be written sequentially and data<br />
can't be updated without resetting the entire zone.<br />
<br />
libblkio is a library that provides an API for efficiently accessing block<br />
devices using modern high-performance block I/O interfaces like Linux io_uring.<br />
<br />
The goal is to extend libblkio so users can use it to access zoned devices<br />
properly. This will require adding support for more request types, expanding<br />
its API to expose additional metadata about the device, and making the<br />
appropriate changes to each libblkio "driver".<br />
<br />
The project consists of the following tasks:<br />
* Add libblkio properties that identify zoned devices and their capabilities (zone size, max active zones, whether zone append is supported, etc).<br />
* Add zone append, report zones, and zone management to the libblkio API.<br />
* Extend the io_uring driver to support zoned storage. Zone append may be tricky to implement because Linux has a no userspace API for it and can be considered a stretch goal if there's time.<br />
* Extend the virtio-driver crate to implement zoned APIs.<br />
* (Stretch goal) Modify QEMU's blkio block driver to use the new libblkio zoned APIs.<br />
<br />
This is important for QEMU since it will soon support zoned devices too and<br />
several of its BlockDrivers rely on libblkio. In particular, this project would<br />
enable QEMU to access zoned vhost-user-blk and vhost-vdpa-blk devices.<br />
<br />
'''Links:'''<br />
* https://zonedstorage.io/<br />
* https://libblkio.gitlab.io/libblkio/<br />
* https://gitlab.com/libblkio/libblkio/-/issues/44<br />
* https://gitlab.com/qemu-project/qemu/-/blob/master/block/blkio.c<br />
<br />
'''Details:'''<br />
* Project size: 175 hours (small)<br />
* Skill level: intermediate<br />
* Language: Rust, C<br />
* Mentor: Alberto Faria <afaria@redhat.com> (afaria on IRC), Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC)<br />
* Suggested by: Alberto Faria <afaria@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/SVQOptimization&diff=11140Internships/ProjectIdeas/SVQOptimization2023-02-09T13:34:34Z<p>Stefanha: /* Shadow Virtqueue performance optimization */</p>
<hr />
<div>=== Shadow Virtqueue performance optimization ===<br />
<br />
'''Summary:''' Implement multithreading and mmap Queue Notifier optimizations for Shadow Virtqueues<br />
<br />
To perform a virtual machine live migration, QEMU needs to know when devices modify memory so that the memory contents can be migrated each time they have been modified. Otherwise the virtual machine would resume with outdated memory and probably crash.<br />
<br />
This is especially difficult with passthrough hardware devices because QEMU does not intercept the memory writes.<br />
As a method to overcome this for virtio devices, QEMU can present an<br />
emulated virtqueue to the device, called a Shadow Virtqueue (SVQ),<br />
instead of allowing the device to access guest memory directly.<br />
SVQ will then forward the writes to the guest, being the effective<br />
writer of the guest memory and knowing when a portion of it needs to<br />
be migrated again.<br />
<br />
As this effectively breaks passthrough and adds extra<br />
steps in the communication, this comes with a performance penalty in<br />
several forms: Context switches, more memory reads and writes increasing<br />
cache pressure, etc.<br />
<br />
At this moment the SVQ code is not optimized. It cannot forward<br />
buffers in parallel using multiqueue and multithreading, and it does not<br />
use the mmap Queue Notify mechanism to notify the device for available<br />
buffers efficiently, so these notifications need to perform an extra host kernel<br />
context switch.<br />
<br />
The SVQ code requires modifications for multithreading. There are examples of multithreaded devices already, like<br />
virtio-blk, which can be used as a template. Proposals for a command-line syntax to map virtqueues to threads have been sent to QEMU mailing list already and you can use them.<br />
<br />
Regarding the mmap Queue Notify optimization, QEMU already has code to set up the Queue Notify address for a vDPA device in vhost_vdpa_host_notifier_init(). At the moment the SVQ code doesn't make use of this yet. The SVQ code needs to write into the mmap region to avoid the more expensive event_notifier_set() call in vhost_svq_kick().<br />
<br />
Your goal is the complete the following tasks:<br />
* Measure SVQ performance compared to non-SVQ with standard profiling tools like netperf (TCP_STREAM & TCP_RR) or iperf equivalent + DPDK's testpmd with AF_PACKET.<br />
* Add multithreading to SVQ, extracting the code from the Big QEMU Lock (BQL)<br />
* Add mmap Queue Notify support to vhost_svq_kick().<br />
<br />
'''Links:'''<br />
* vhost_vdpa_host_notifier_init() https://gitlab.com/qemu-project/qemu/-/blob/master/hw/virtio/vhost-vdpa.c#L479<br />
* vhost_svq_kick() function https://gitlab.com/qemu-project/qemu/-/blob/master/hw/virtio/vhost-shadow-virtqueue.c#L220<br />
* virtqueue IOThread mapping command-line syntax: https://www.mail-archive.com/qemu-devel@nongnu.org/msg933001.html<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate<br />
* Languages: C<br />
* Mentor: Eugenio Perez Martin <eperezma@redhat.com> (eperezma on IRC)<br />
* Suggested by: Eugenio Perez Martin <eperezma@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtioSound&diff=11139Internships/ProjectIdeas/VirtioSound2023-02-09T13:34:12Z<p>Stefanha: /* Implement virtio-sound emulation as a Rust vhost-user back-end */</p>
<hr />
<div>=== Implement virtio-sound emulation as a Rust vhost-user back-end ===<br />
<br />
'''Summary:''' Implement device emulation for the new virtio-sound device.<br />
<br />
The VIRTIO specification defines a sound device and Linux has a guest driver for it, but QEMU does not emulate the virtio-sound device yet.<br />
<br />
The goal is to implement virtio-sound emulation with mono and stereo playback and capture support. The code should be developed as a vhost-user back-end (a standalone program that communicates with QEMU) using the Rust vhost-user and gstreamer crates. The vhost crate handles the interfacing with QEMU and the low-level VIRTIO details. The gstreamer crate is a cross-platform multimedia API that abstracts the native audio API (ALSA, CoreAudio, etc).<br />
<br />
As stretch goals you can implement additional functionality covered by the VIRTIO sound device specification, including support for multi-channel devices (e.g. surround sound playback), channel maps, etc. If you have even more time you can implement QEMU dbus-display support for streaming audio over remote desktop connections (for remote viewers like VNC/RDP/Spice).<br />
<br />
To familiarize yourself with the project idea (see links below):<br />
# Review the VIRTIO sound device specification.<br />
# Review the vhost-user crate's vhost-user-backend module and the gstreamer crate.<br />
# Review the unfinished patches for an idea of how to implement the device in C.<br />
<br />
Intermediate Rust programming skills are required for this project. This project will expose you to device emulation, VIRTIO, and you'll learn how audio devices work at the hardware interface level.<br />
<br />
'''Links:'''<br />
* Device specification: https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-52900014<br />
* Linux guest driver: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/virtio<br />
* vhost crate: https://github.com/rust-vmm/vhost/tree/main/crates/vhost-user-backend<br />
* vhost-device repo: https://github.com/rust-vmm/vhost-device<br />
* gstreamer crate: https://docs.rs/gstreamer/latest/gstreamer/<br />
* dbus-display: https://www.qemu.org/docs/master/interop/dbus-display.html<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate/advanced<br />
* Language: Rust<br />
* Mentor: Stefan Hajnoczi <stefanha@redhat.com>, Alex Bennée <alex.bennee@linaro.org><br />
* Suggested by: Gerd Hoffmann <kraxel@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/RDPServer&diff=11138Internships/ProjectIdeas/RDPServer2023-02-09T13:33:51Z<p>Stefanha: /* RDP server */</p>
<hr />
<div>=== RDP server ===<br />
<br />
'''Summary:''' An out-of-process RDP server using `-display dbus` <br />
<br />
QEMU can export its display via D-Bus since 7.0. The interface is close to the QEMU-internal API and offers display, audio, inputs, chardev, usb... Among other projects using it, a gtk4 client is in development (qemu-rdw), helping some applications such as GNOME Boxes, to port their code.<br />
<br />
It's also interesting to use the interface to export the display on the network, using existing protocols, like VNC, Spice, or RDP. For example, and as a starting point perhaps, there is already an experimental VNC server written 100% Rust.<br />
<br />
RDP being the most supported protocol, with more features and efficiency, this project idea is to develop a RDP server to export `-display dbus` over the network. Ideally, the project should be written in Rust. Unfortunately, IronRDP, the RDP crate, is lacking some server support. Investments in IronRDP is thus required. Alternatively, the project could be written in C (or other languages) with FreeRDP.<br />
<br />
'''Links:'''<br />
* [https://www.qemu.org/docs/master/interop/dbus-display.html QEMU D-Bus interface]<br />
* [https://gitlab.com/marcandre.lureau/qemu-display/-/tree/master/qemu-vnc experimental VNC server]<br />
* [https://github.com/Devolutions/IronRDP IronRDP]<br />
* [https://www.freerdp.com/ FreeRDP]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate (familiarity with RDP would be a big plus)<br />
* Languages: C, Rust<br />
* Mentor: Marc-André Lureau - marcandre.lureau@redhat.com - elmarco<br />
* Suggested by: Marc-André Lureau</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/RustBindingsForLibNBD&diff=11137Internships/ProjectIdeas/RustBindingsForLibNBD2023-02-09T13:33:39Z<p>Stefanha: /* Rust bindings for libnbd */</p>
<hr />
<div>=== Rust bindings for libnbd ===<br />
<br />
'''Summary:''' Add Rust bindings for [https://gitlab.com/nbdkit/libnbd libnbd]<br />
<br />
[https://en.wikipedia.org/wiki/Network_block_device Network block device (NBD)] is a protocol for exporting block devices (disk-like things) between processes, either across the network or between processes on the same machine. [https://gitlab.com/nbdkit/libnbd libnbd] is a client library and some tools for talking to NBD servers. This library has bindings in various languages such as Python, but not in Rust, and the project is about writing those bindings.<br />
<br />
Note that the bindings in libnbd are generated. [https://gitlab.com/nbdkit/libnbd/-/tree/master/generator You must add Rust bindings to the generator] so that they are updated automatically as the libnbd API evolves in future. Simply addng Rust bindings for the current API will not be enough to complete the project. The Rust bindings must also be of high quality and natural for Rust developers to use. Documentation and tests are also required.<br />
<br />
'''Links:'''<br />
* https://en.wikipedia.org/wiki/Network_block_device<br />
* https://gitlab.com/nbdkit/libnbd<br />
* [https://libguestfs.org/libnbd.3.html C API]<br />
* [https://libguestfs.org/nbdsh.1.html Python API]<br />
* [https://gitlab.com/nbdkit/libnbd/-/tree/master libnbd generator]<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate or advanced<br />
* Language: C, Rust, OCaml<br />
* Mentor: rjones@redhat.com rwmjones on IRC<br />
* Suggested by: Richard Jones</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/NativeLibraryCalls&diff=11136Internships/ProjectIdeas/NativeLibraryCalls2023-02-09T13:33:25Z<p>Stefanha: /* Native Library Calls */</p>
<hr />
<div>=== Native Library Calls ===<br />
<br />
'''Summary:''' Implement a native bypass for when a program running under linux-user calls a well known library call<br />
<br />
When running under linux-user we translate the whole program which includes all the library calls. A number of well understood library functions are usually fairly heavily optimised for the processor they run on. For example the semantics of memcpy are very well understood. We could consider instead of translating those library functions call to native versions of the code. As the runtime of library functions is generally biased to a few core functions only a small subset would need to be hooked to be useful (mem*, str*).<br />
<br />
'''Links:'''<br />
* This technique is key to Box64: https://github.com/ptitSeb/box64<br />
<br />
'''Details:'''<br />
* Project size: 350 hours<br />
* Skill level: intermediate with a good understanding of how linkers link to library calls<br />
* Language: C<br />
* Mentor: Alex Bennée (alex.bennee@linaro.org)<br />
* Suggested by: Alex Bennée</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/VirtioSound&diff=11135Internships/ProjectIdeas/VirtioSound2023-02-09T13:32:42Z<p>Stefanha: /* Implement virtio-sound emulation as a Rust vhost-user back-end */</p>
<hr />
<div>=== Implement virtio-sound emulation as a Rust vhost-user back-end ===<br />
<br />
'''Summary:''' Implement device emulation for the new virtio-sound device.<br />
<br />
The VIRTIO specification defines a sound device and Linux has a guest driver for it, but QEMU does not emulate the virtio-sound device yet.<br />
<br />
The goal is to implement virtio-sound emulation with mono and stereo playback and capture support. The code should be developed as a vhost-user back-end (a standalone program that communicates with QEMU) using the Rust vhost-user and gstreamer crates. The vhost crate handles the interfacing with QEMU and the low-level VIRTIO details. The gstreamer crate is a cross-platform multimedia API that abstracts the native audio API (ALSA, CoreAudio, etc).<br />
<br />
As stretch goals you can implement additional functionality covered by the VIRTIO sound device specification, including support for multi-channel devices (e.g. surround sound playback), channel maps, etc. If you have even more time you can implement QEMU dbus-display support for streaming audio over remote desktop connections (for remote viewers like VNC/RDP/Spice).<br />
<br />
To familiarize yourself with the project idea (see links below):<br />
# Review the VIRTIO sound device specification.<br />
# Review the vhost-user crate's vhost-user-backend module and the gstreamer crate.<br />
# Review the unfinished patches for an idea of how to implement the device in C.<br />
<br />
Intermediate Rust programming skills are required for this project. This project will expose you to device emulation, VIRTIO, and you'll learn how audio devices work at the hardware interface level.<br />
<br />
'''Links:'''<br />
* Device specification: https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html#x1-52900014<br />
* Linux guest driver: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/virtio<br />
* vhost crate: https://github.com/rust-vmm/vhost/tree/main/crates/vhost-user-backend<br />
* vhost-device repo: https://github.com/rust-vmm/vhost-device<br />
* gstreamer crate: https://docs.rs/gstreamer/latest/gstreamer/<br />
* dbus-display: https://www.qemu.org/docs/master/interop/dbus-display.html<br />
<br />
'''Details:'''<br />
* Skill level: intermediate/advanced<br />
* Language: Rust<br />
* Mentor: Stefan Hajnoczi <stefanha@redhat.com>, Alex Bennée <alex.bennee@linaro.org><br />
* Suggested by: Gerd Hoffmann <kraxel@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/FreeBSDUser&diff=11133Internships/ProjectIdeas/FreeBSDUser2023-02-09T01:24:25Z<p>Stefanha: Created page with "=== FreeBSD user emulation improvements === '''Summary:''' Complete FreeBSD user emulation in specific areas '''Under construction.''' To be completed soon. QEMU's user em..."</p>
<hr />
<div>=== FreeBSD user emulation improvements ===<br />
<br />
'''Summary:''' Complete FreeBSD user emulation in specific areas<br />
<br />
'''Under construction.''' To be completed soon.<br />
<br />
QEMU's user emulator (bsd-user) runs BSD executables. This is often used in cross-compilation environments where bsd-user enables programs for other CPU architectures to run. FreeBSD support is not yet complete in QEMU.<br />
<br />
'''Links:'''<br />
<br />
'''Details:'''<br />
* Skill level: intermediate<br />
* Language: C<br />
* Mentor: Warner Losh <imp@bsdimp.com><br />
* Suggested by: Warner Losh <imp@bsdimp.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/LibblkioZonedStorage&diff=11130Internships/ProjectIdeas/LibblkioZonedStorage2023-02-07T14:31:14Z<p>Stefanha: </p>
<hr />
<div>=== Zoned device support for libblkio ===<br />
<br />
'''Summary:''' Add support for zoned block devices to the libblkio library.<br />
<br />
Zoned block devices are special kinds of disks that are split into several<br />
regions called zones, where each zone may only be written sequentially and data<br />
can't be updated without resetting the entire zone.<br />
<br />
libblkio is a library that provides an API for efficiently accessing block<br />
devices using modern high-performance block I/O interfaces like Linux io_uring.<br />
<br />
The goal is to extend libblkio so users can use it to access zoned devices<br />
properly. This will require adding support for more request types, expanding<br />
its API to expose additional metadata about the device, and making the<br />
appropriate changes to each libblkio "driver".<br />
<br />
The project consists of the following tasks:<br />
* Add libblkio properties that identify zoned devices and their capabilities (zone size, max active zones, whether zone append is supported, etc).<br />
* Add zone append, report zones, and zone management to the libblkio API.<br />
* Extend the io_uring driver to support zoned storage. Zone append may be tricky to implement because Linux has a no userspace API for it and can be considered a stretch goal if there's time.<br />
* Extend the virtio-driver crate to implement zoned APIs.<br />
* (Stretch goal) Modify QEMU's blkio block driver to use the new libblkio zoned APIs.<br />
<br />
This is important for QEMU since it will soon support zoned devices too and<br />
several of its BlockDrivers rely on libblkio. In particular, this project would<br />
enable QEMU to access zoned vhost-user-blk and vhost-vdpa-blk devices.<br />
<br />
'''Links:'''<br />
* https://zonedstorage.io/<br />
* https://libblkio.gitlab.io/libblkio/<br />
* https://gitlab.com/libblkio/libblkio/-/issues/44<br />
* https://gitlab.com/qemu-project/qemu/-/blob/master/block/blkio.c<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate<br />
* Language: Rust, C<br />
* Mentor: Alberto Faria <afaria@redhat.com> (afaria on IRC), Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC)<br />
* Suggested by: Alberto Faria <afaria@redhat.com></div>Stefanhahttps://wiki.qemu.org/index.php?title=Google_Summer_of_Code_2023&diff=11129Google Summer of Code 20232023-02-07T14:27:25Z<p>Stefanha: /* Project Ideas */</p>
<hr />
<div>= Introduction =<br />
<br />
QEMU is applying for [https://summerofcode.withgoogle.com/ Google Summer of Code 2023]. This page contains our ideas list and information for applicants and mentors. Google Summer of Code is an open source internship program offering paid remote work.<br />
<br />
'''Status: Google will announce accepted organizations on February 22 at 18:00 UTC. Applicants may get in touch with mentors now but please don't invest too much time until Google officially announces participating organization.'''<br />
<br />
= Application Process =<br />
<br />
=== 1. Discuss the project idea with the mentor(s) ===<br />
<br />
Read the project ideas list and choose one you are interested in. Read the links in the project idea description and start thinking about how you would approach this. Ask yourself:<br />
* Do I have the necessary technical skills to complete this project?<br />
* Will I be able to work independently without the physical presence of my mentor?<br />
<br />
If you answer no to these questions, choose another project idea and/or organization that fits your skills.<br />
<br />
Once you have identified a suitable project idea, email the mentor(s) your questions about the idea and explain your understanding of the project idea to them to verify that you are on the right track.<br />
<br />
=== 2. Fill out the application form ===<br />
<br />
The [https://summerofcode.withgoogle.com/ application form] asks for a problem description and outline of how you intend to implement a solution. You will need to do some background research (looking at source code, browsing relevant specifications, etc) in order to decide how to tackle the project. The form asks for an initial project schedule which you should create by breaking down the project into tasks and estimating how long they will take. The schedule can be adjusted during the summer so don't worry about getting everything right ahead of time.<br />
<br />
=== 3. Interview including a coding exercise ===<br />
<br />
You may be invited to an interview consisting of a 30-minute coding exercise, followed by technical discussion and a chance to ask questions you have about the project idea, QEMU, and GSoC. The coding exercise is designed to show fluency in the programming language for your project idea (QEMU projects are typically in C but could also be in Python or Rust).<br />
<br />
Here is a C coding exercise we have used in previous years when interviewing applicants: [http://pastebin.com/6J1wwDhK 2014 coding exercise]<br />
<br />
Try it and see if you can complete the sample coding exercise comfortably. We cannot answer questions about the previous coding exercise but hopefully it should be self-explanatory.<br />
<br />
If you find the exercise too challenging, think about applying to other organizations where you have a stronger technical background and will be more competitive compared with other candidates.<br />
<br />
== Key Dates ==<br />
<br />
From the [https://developers.google.com/open-source/gsoc/timeline timeline]:<br />
<br />
* February 22 18:00 UTC - Organizations and project ideas announced<br />
* March 20 - April 4 18:00 UTC - Application period<br />
* May 4 18:00 UTC - Accepted applicants announced<br />
* May 29 - August 28 - Standard coding period (an extended timeline is possible depending on your project)<br />
<br />
= Find Us =<br />
<br />
* IRC (GSoC specific): [https://webchat.oftc.net/?channels=qemu-gsoc #qemu-gsoc on irc.oftc.net]<br />
<br />
* IRC (development):<br />
** QEMU: [https://webchat.oftc.net/?channels=qemu #qemu on irc.oftc.net]<br />
** KVM: #kvm on chat.freenode.net<br />
<br />
* Mailing lists:<br />
** QEMU: [http://lists.nongnu.org/mailman/listinfo/qemu-devel qemu-devel]<br />
** KVM: [http://www.linux-kvm.org/page/Lists,_IRC linux-kvm]<br />
<br />
For general questions about QEMU in GSoC, please contact the following people:<br />
<br />
* [[User:Stefanha|Stefan Hajnoczi]] <stefanha@gmail.com> (stefanha on IRC)<br />
<br />
= Project Ideas =<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
{{:Internships/ProjectIdeas/NativeLibraryCalls}}<br />
{{:Internships/ProjectIdeas/RustBindingsForLibNBD}}<br />
{{:Internships/ProjectIdeas/RDPServer}}<br />
{{:Internships/ProjectIdeas/VirtioSound}}<br />
{{:Internships/ProjectIdeas/SVQOptimization}}<br />
{{:Internships/ProjectIdeas/SVQCVQSupport}}<br />
{{:Internships/ProjectIdeas/LibblkioZonedStorage}}<br />
<br />
== How to add a project idea ==<br />
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].<br />
# Add a link from this page like this: <nowiki>{{:Internships/ProjectIdeas/YourIdea}}</nowiki><br />
<br />
This is the listing of suggested project ideas. Students are free to suggest their own projects, see [[#How to propose a custom project idea]] below.<br />
<br />
== Project idea template ==<br />
<br />
<nowiki>=== TITLE ===<br />
<br />
'''Summary:''' Short description of the project<br />
<br />
Detailed description of the project.<br />
<br />
'''Links:'''<br />
* Wiki links to relevant material<br />
* External links to mailing lists or web sites<br />
<br />
'''Details:'''<br />
* Skill level: beginner or intermediate or advanced<br />
* Language: C<br />
* Mentor: Email address and IRC nick<br />
* Suggested by: Person who suggested the idea</nowiki><br />
<br />
= How to propose a custom project idea =<br />
<br />
Applicants are welcome to propose their own project ideas. The process is as follows:<br />
<br />
# Email your project idea to qemu-devel@nongnu.org. CC Stefan Hajnoczi <stefanha@gmail.com> and regular QEMU contributors who you think might be interested in mentoring.<br />
# If a mentor is willing to take on the project idea, work with them to fill out the "Project idea template" above and email Stefan Hajnoczi <stefanha@gmail.com>.<br />
# Stefan will add the project idea to the wiki.<br />
<br />
Note that other candidates can apply for newly added project ideas. This ensures that custom project ideas are fair and open.<br />
<br />
= How to get familiar with our software =<br />
<br />
See what people are developing and talking about on the mailing lists:<br />
* [http://thread.gmane.org/gmane.comp.emulators.qemu/ qemu-devel]<br />
* [https://www.redhat.com/archives/libvir-list/ libvir-list]<br />
* [http://www.spinics.net/lists/kvm/ kvm]<br />
<br />
Grab the source code or browse it:<br />
* [http://git.qemu-project.org/?p=qemu.git;a=summary qemu.git]<br />
* [http://libvirt.org/git/?p=libvirt.git;a=summary libvirt.git]<br />
* [https://git.kernel.org/cgit/virt/kvm/kvm.git/ kvm.git]<br />
<br />
Build QEMU and run it: [http://wiki.qemu-project.org/Hosts/Linux QEMU on Linux Hosts]<br />
<br />
= Links =<br />
<br />
* [https://google.github.io/gsocguides/student/ Student Manual]<br />
* [https://developers.google.com/open-source/gsoc/faq FAQ]<br />
* [https://developers.google.com/open-source/gsoc/timeline Timeline]<br />
* [http://blog.vmsplice.net/2011/03/advice-for-students-applying-to-google.html Advice for students applying (from 2011 but still relevant!)]<br />
<br />
= Information for mentors =<br />
<br />
Mentors are responsible for keeping in touch with their intern and assessing progress. GSoC has evaluations where both the mentor and intern assess each other.<br />
<br />
The mentor typically gives advice, reviews the intern's code, and has regular communication with the intern to ensure progress is being made.<br />
<br />
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the intern's experience.<br />
<br />
The mentor chooses their intern by reviewing application forms and conducting IRC interviews with applicants. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right intern is critical so that both the mentor and the intern can have a successful experience.<br />
<br />
[[Category:GSoC]]</div>Stefanhahttps://wiki.qemu.org/index.php?title=Internships/ProjectIdeas/LibblkioZonedStorage&diff=11128Internships/ProjectIdeas/LibblkioZonedStorage2023-02-07T14:26:43Z<p>Stefanha: </p>
<hr />
<div>=== Zoned device support for libblkio ===<br />
<br />
'''Summary:''' Add support for zoned block devices to the libblkio library.<br />
<br />
Zoned block devices are special kinds of disks that are split into several<br />
regions called zones, where each zone may only be written sequentially and data<br />
can't be updated without resetting the entire zone.<br />
<br />
libblkio is a library that provides an API for efficiently accessing block<br />
devices using modern high-performance block I/O interfaces like Linux io_uring.<br />
<br />
The goal is to extend libblkio so users can use it to access zoned devices<br />
properly. This will require adding support for more request types, expanding<br />
its API to expose additional metadata about the device, and making the<br />
appropriate changes to each libblkio "driver".<br />
<br />
The project consists of the following tasks:<br />
* Add libblkio properties that identify zoned devices and their capabilities (zone size, max active zones, whether zone append is supported, etc).<br />
* Add zone append, report zones, and zone management to the libblkio API.<br />
* Extend the io_uring driver to support zoned storage. Zone append may be tricky to implement because Linux has a no userspace API for it and can be considered a stretch goal if there's time.<br />
* Extend the virtio-driver crate to implement zoned APIs.<br />
<br />
This is important for QEMU since it will soon support zoned devices too and<br />
several of its BlockDrivers rely on libblkio. In particular, this project would<br />
enable QEMU to access zoned vhost-user-blk and vhost-vdpa-blk devices.<br />
<br />
'''Links:'''<br />
* https://zonedstorage.io/<br />
* https://libblkio.gitlab.io/libblkio/<br />
* https://gitlab.com/libblkio/libblkio/-/issues/44<br />
<br />
'''Details:'''<br />
* Project size: 175 hours<br />
* Skill level: intermediate<br />
* Language: Rust, C<br />
* Mentor: Alberto Faria <afaria@redhat.com> (afaria on IRC), Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC)<br />
* Suggested by: Alberto Faria <afaria@redhat.com></div>Stefanha