The JBoss Community is participating in Google Summer of Code in 2022. All contributors & developers are welcome to participate in the https://summerofcode.withgoogle.com/ program with the JBoss Communit. See https://summerofcode.withgoogle.com/programs/2022/organizations/jboss-community for more information If you are a contributor looking forward to participating in the GSoC 2022 with the JBoss Community, feel free to browse the growing idea list below. Please don't hesitate to contact the mentor(s) indicated in the proposal for any related clarification and to discuss proposals. You can also look at GSoC-16 Ideas, 2017 Ideas, 2018 Ideas, 2019 Ideas, 2020 Ideas and 2021 Ideas for suggestions from last years. CONTRIBUTORS: You may find a sample GSoC proposal document here which was for this idea. |
MENTORS: Red Hat employees can change this page directly to add ideas. Please be extra careful to not get other mentor's edits discarded. Non-Red Hatters can add a comment to the page and admins will make sure the idea is added to the page. |
We will list the potential mentors in this place. For now, if you have any questions, please contact the GSoC administrators:
George Zaronikas (gzaronikas) and Ali Ok (@aliok_tr) .
This year's GSoC is different. You may find what's new in GSoC 22 here. Please consider this in your idea proposals. |
Gitter : JBossOutreach/GSoC - Gitter
Please take note - These channels are about generic doubts. For project-specific doubts you will need to contact project mentors and channels specified in the project description.
We prefer the contributors who have made more than one non trivial contributions with the corresponding project team they wish to work in GSoC tenure and specify that in the proposal.
Points to consider while choosing any project
1. You meet at least 50 percent of the requirements. The remaining skills can be honed on the go, so don't worry if you lack some.
2. You can relate to the project idea and you have used something related to the project as a user.
3. You are willing more toward learning the skills and less toward boasting about the skills you have already.
Suggested steps after choosing a favorite project
1. Start to use product/tool/API as a user or hello world client application.
2. Setup the development environment for the project and start to use your own build.
3. Look for newcomer bugs and try to get your head around them.
4. Let us know if you feel stuck at any stage.
Proposal document
Keep in mind to keep the documentation length of around 6 pages
- Page 1 : Abstract of one page about project according to your understanding.
- Page 2-4 : Plans of 3-5 days chunk. Including buffer.
- Page 5 : Previous OpenSource pull requests within or outside of project you wish to work on.
- Page 6 : Personal details including Name, Connection details, Professional profiles, availability during GSoC period etc.
You may find a sample GSoC proposal document here which was for this idea.
Summary of idea:
-Idea
-Feature A
-Feature B
Knowledge prerequisite: Languages/Technologies goes here
Github repo:
Project size: medium (~175 hours) or large (~350 hours)
Skill level: Beginner/Intermediate/Advanced
Contact(s) / potential mentors(s): Mentor(s) name and contact details
Associated JBoss community project(s):
Summary of idea:
During last year's Google Summer of Code project, we got a CoAP protocol adapter contributed to the cloud side of the project. However, transport encryption was out-of-scope for the project back then, as that would be been too much for the summer. Building on last year's contribution, this year the protocol adapter could be extended to support CoAP transport encryption using DTLS.
We understand that the combination of Rust, DTLS, and CoAP isn't a mainstream topic. So it is ok for us to learn some of the technologies, during GSoC. However, you should have some basic understanding of what is required, and have a plan upfront. This is not a beginner project.
Knowledge prerequisite: CoAP, Rust, TLS, Kubernetes (not all, but some)
Github repo: https://github.com/drogue-iot/drogue-cloud/tree/main/coap-endpoint
Skill level: Intermediate
Project size: large (~350 hours)
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Jens Reimann <jreimann@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
Drogue Cloud supports authenticating IoT devices using X.509 client certificates. During last year's GSoC, some management tasks for the drg
command line tool had been added to make this more user friendly. However, the current web console does not have support for that yet.
The goals for this project are:
drg
toolNote: This is not your regular NodeJS/React project. The web console is written in Rust using WebAssembly. It still uses the PatternFly toolkit tough.
Knowledge prerequisite: UX, Rust
Github repo: https://github.com/drogue-iot/drogue-cloud/tree/main/coap-endpoint
Skill level: Intermediate
Project size: large (~350 hours)
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Jean-Baptiste Trystram <jbtrystram@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
Drogue Cloud records application metrics for the IoT stack. Things like number of devices registered, messages per second, etc. These metrics are tagged with an application (tenant) tag, so that it is possible to extract metrics on a per-tenant basis. It would be nice if those could be shown in the console, so that a tenant/user can see the current usage of this tenant specific service.
The goals for this project are:
Note: This is not your regular NodeJS/React project. The web console is written in Rust using WebAssembly. It still uses the PatternFly toolkit tough.
Knowledge prerequisite: UX, Rust
Github repo: https://github.com/drogue-iot/drogue-cloud/tree/main/coap-endpoint
Project size: medium (~175 hours)
Skill level: Beginner
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Jean-Baptiste Trystram <jbtrystram@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
Knative is a serverless framework for Kubernetes. Drogue IoT Cloud is providing IoT friendly APIs on the cloud side. As Drogue Cloud uses CloudEvents, both technologies can work together quite nicely.
However, in order to consume events from Drogue Cloud using Knative, one needs to use the Kafka Event Source. We would like to be able to offer a dedicated "Drogue IoT event source", which connects using OAuth2 or API tokens, and get only configured using the Drogue Cloud specific connection parameters. Also, sending back commands using a Drogue Cloud Sink should be possible. This can use the MQTT integration API of Drogue Cloud, in order to consume messages. And the command endpoint, to submit commands back to devices.
The goals of the project are:
Knowledge per-requisite: Go
Project size: large (~350 hours)
Skill level: Intermediate
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Dejan Bosanac <dbosanac@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
Drogue IoT Cloud allows users to create device and send messages. However, that should be limited, according to a set of rules an administrator can configure. This should limit things like: Number of devices created, number of messages sent per second, number of bytes sent per second.
The goal of this project is:
Outside of the scope is:
Knowledge pre-requisite: Rust, Prometheus
Github repo: https://github.com/drogue-iot/drogue-cloud/tree/main/console-frontend
Project size: large (~350 hours)
Skill level: Intermediate
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Jens Reimann <jreimann@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
Part of Drogue IoT is a firmware for microcontrollers, written in Rust. The other part is a cloud side solution. Bring that in combination with a Web IDE, you might soon find yourself in a position that you want to flash a microcontroller over USB from your web browser. As a browser API for accessing USB devices attached to the user's machine exists, this should be possible in general.
The goal of this project is to bring together a hand full of projects and technologies, and create an frontend application, for the browser, to flash embedded devices. This needs to be done using Rust, and WebAssembly, so that existing code from https://probe.rs/, which can talk to devices, can be re-used.
Knowledge pre-requisite: Rust, WebAssembly
Project size: large (~350 hours)
Skill level: Advanced
Project chat: https://matrix.to/#/#drogue-iot:matrix.org
Contact(s) / potential mentors(s): Jens Reimann <jreimann@redhat.com>
Associated JBoss community project(s): Drogue IoT
Summary of idea:
The innovative part of EAT is creating the test once and testing with any version of the tested software. It may be firstly applied for the JBoss Servers, but, in general, a similar structure, can be used for creating tests about any software with multiple versions or for multiple software programs that have a part of the testsuite in common. EAT is a project under the ΙΔΕΑ statement.
Possible tasks for this project :
Project size: large (~350 hours)
Github repo: https://github.com/EAT-JBCOMMUNITY/EAT
Contact / potential mentors: Panagiotis Sotiropoulos (psotirop@redhat.com)
Associated JBoss community project: EAT
Summary of idea:
A project for applying Machine Learning to large amounts of verification data and matching fresh test failures with existing open/reported issues. This work can be broken down into manageable pieces. The first part is to find a best fitting ‘list of open issues’ that matches a test failure - take our existing code that is using a particular model and try the same approach but varying the model to measure which models gives the most accurate matches with existing issues. This can be fairly open-ended work, but we will also engage the larger community at the project for input as well as involve the contributors in additional learning and research as well as consultation with data scientists.
After some experimentation with this, and having used the contents of various repositories (through queries to Github API to search through issues), the second piece can be to extrapolate this approach to an extended search through other content sources.
Small amount of initial work already completed: https://github.com/adoptium/aqa-test-tools/wiki/Outreachy-TRSS-Machine-Learning-Project:-Deep-AQAtik
Knowledge prerequisite: Machine learning basics, Python, Flask, Anaconda, data visualization
Github repo: https://github.com/adoptium/aqa-test-tools
Project size: medium (~175 hours)
Skill level: Intermediate/Advanced
Contact(s) / potential mentors(s): Shelley Lambert (slambert@redhat.com), Lan Xia (lan_xia@ca.ibm.com), Longyu Zhang (longyu.zhang@ibm.com)
Associated JBoss community project(s): Adoptium/AQAvit
Summary of idea:
Drools has its own language to define a set of rules called DRL, see https://docs.jboss.org/drools/release/latest/drools-docs/html_single/#drl-rules-con_drl-rules
The parser internally used for this language is at the moment a legacy mix of antlr3 plus tons of handwritten code. We want to migrate this parser to one implemented with antlr4 for a twofold reason
A first, very incomplete, draft implementation of both the antlr4 based parser and the LSP server are available here https://github.com/mariofusco/drools-lsp Of course it will be moved into drools code base when ready, replacing the existing parser and checking with the entire Drools test suite that it hasn't any regression.
Knowledge pre-requisite: Java, antlr4
Github repo: https://github.com/mariofusco/drools-lsp
Project size: large (~350 hours)
Skill level: Advanced
Contact(s) / potential mentors(s): Mario Fusco <mfusco@redhat.com>
Associated JBoss community project(s): Drools
Summary of idea:
Quarkus does timeboxed releases every 4 to 6 weeks which includes Quarkus core and 180+ extensions. We aim for not breaking users and extensions writers but we also don’t want to stand still and not be able to innovate. Today we manually maintain a migration wiki page on what needs migrating if anything between releases. Project idea is to utilize the already existing revapi.org setup and expand it to properly detect and generate documentation for api breakages in a way that help users and extension writers.
When this is done it will be a key central element in Quarkus releases and used heavily across all extensions. If done right it will have a massive impact on enabling Quarkus to continue to innovate.
Expected Technologies to be used: revapi.org, java, quarkus, asciidoctor
Contributor Tasks
- Learn to use revapi
- Enhance the current revapi reporting to be useful
- Automate revapi usage in Quarkus CI build
- Document and script for daily usage of revapi
Stretch goals:
- Implement additonal revapi checks for i.e. property, library and configuraton changes
Contributor Benefits
You will get to work with one of the fastest growing Java frameworks in newer times.
You will work with a 100% remote and distributed team.
You will learn about how to write frameworks, how to keep API stable and how to evolve them.
When successful this revapi integration will have many year impact on ensuring Quarkus development team and users will be able to upgrade and migrate for years to come. It will be used daily by development team and on each monthly release of Quarkus the whole ecosystem will benefit from this work.
Knowledge pre-requisite: Java
Github repo: https://github.com/quarkusio/quarkus
Project size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Max Rydahl Andersen <manderse@redhat.com>, Lukas Krejci <lkrejci@redhat.com>
Associated JBoss community project(s): Quarkus
Summary of idea:
If you want to learn about security, this is your chance to develop a new security feature for the WildFly Application Server! As a bonus, you'll get to work with a diverse team.
The WildFly Elytron project is a security framework for Java clients and application servers. WildFly is an open source application server. Elytron is used by the WildFly application server to secure applications that are deployed to the server and to secure management access to the server. Banks, retail stores, and governments are just some examples of end-users of the enterprise version of the WildFly application server.
The TLS protocol allows communication between a client and a server to be encrypted. WildFly Elytron allows users to configure policy information related to TLS. Currently, this includes things like key managers, trust managers, cipher suites, and protocols (see https://github.com/wildfly-security/wildfly-elytron/tree/1.x/ssl/src/main/java/org/wildfly/security/ssl).
The purpose of this project is to work on new TLS features for WildFly Elytron. In particular, the goals of this project are to:
Possible tasks for this project, broken down by the two goals described above:
The WildFly Elytron team is a diverse, distributed team that has a lot of experience working with interns and junior engineers.
Knowledge pre-requisites:
GitHub repo: https://github.com/wildfly-security/wildfly-elytron
Other useful links:
Project size: Medium (~175 hours) or large (~350 hours) depending on whether you’d like to tackle only one feature or both features
Skill level: Intermediate
Project chat: https://wildfly.zulipchat.com/#narrow/stream/173102-wildfly-elytron
Contact(s) / potential mentors(s): Farah Juma <fjuma@redhat.com> and Diana Krepinska <dvilkola@redhat.com>
Associated JBoss community project(s): Elytron, WildFly
Summary of idea:
Kruize Autotune is a Performance Tuning Tool for Kubernetes. https://github.com/kruize/autotune. It uses Hyper Parameter Optimization to tune the language runtime layers of a given application.
This project will attempt to use Machine Learning to classify the incoming load as well as classify the target application type. The classification will help us to make better configuration recommendations for performance objectives as well as reduce the time taken to provide those recommendations. Currently it takes more than 24 hours to provide a recommendation using bayesian optimization and this is for a fixed incoming load. Classification of incoming load will help us to handle diverse load conditions and classification of the application type can help us to narrow down on the right set of tunables. The goal of this project is to explore various classification algorithms and arrive at a framework that best suits the needs of the Autotune project.
Knowledge prerequisite: Machine Learning basics, Python, Java, Container and Kubernetes basics
Github repo: https://github.com/kruize/autotune
Project Size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentor(s): Dinakar Guniguntala <dgunigun@redhat.com>, Sanjay Arora <saarora@redhat.com>
Associated JBoss community project(s): Quarkus.
Other related Open Source Project(s): Kubernetes, Minikube, Prometheus, OpenShift
Summary of idea: Reduce power consumption on Flotta device agent on small factor edge devices
-Idea
Flotta-device agent is handling all the workloads on small factor SBC, like RaspberryPI, Nvidia Jetson Boards, etc.. These SBCs can be located anywhere, where the power or network cannot be reliable.
Some devices are running on moving devices or powered by solar panels, where power consumption is a key factor.
Features that will try to achieve:
Knowledge prerequisite:
Github repo: https://github.com/project-flotta
Project size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Mentor(s) name and contact details
Eloy Coto Pereiro ecotoper@redhat.com
Summary of idea: Running WASM workloads on small factor devices
-Idea
At the moment, the flotta-project can run container workloads on any device. One of the things that we want to achieve is running other types of workloads. Web assembly (WASM) is a technology that provides a way to run workloads that users can write with multiple programming languages.
Features that will try to achieve:
Knowledge prerequisite:
Github repo: https://github.com/project-flotta
Project size: medium (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Mentor(s) name and contact details
Eloy Coto Pereiro ecotoper@redhat.com
Summary of idea: edge devices demo
-Idea
It would be great to have an example application which would run on a bunch of devices collecting video streams/pictures from webcam with some analysis on the device. Later it is sent to the cluster and presented (UI).
Features that will try to achieve:
Knowledge prerequisite:
Github repo: https://github.com/project-flotta
Project size: medium (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Mentor(s) name and contact details
Piotr Kliczewski pkliczew@redhat.com
Summary of idea:
-Idea
Flotta-device agent handles workloads on low resource devices like RaspberryPI, Nvidia Jetson Boards, etc. These devices can be located anywhere.
The goal is to investigate the Internet network topology and measure the performance of the network using devices managed by flotta.
The flotta-devices must perform large-scale topology discovery efficiently, both at the IP level and at the router level. In addition, the devices should sense the quality of the network using active probing tools (i.e. traceroute, ICMP, ping). Later devices share information regarding the paths they have explored to the cluster and presented (UI).
Features that will try to achieve:
Knowledge prerequisite:
Github repo: https://github.com/project-flotta
Project size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Mentor(s) name and contact details
Gloria Ciavarrini gciavarrini@redhat.com
Summary of idea:
Multimap is a data structure that has gotten the attention from Infinispan users. The structure today lacks evolutions and support of features and new API of Infinispan:
Expected Technologies to be used: java, infinispan, quarkus
Contributor Tasks
- Evolve Multimap data structure in Infinispan
- Enhance the current API in Quarkus
- Evolve tutorials
Contributor Benefits
You will learn how to implement a Data structure like Multimap and add new features as well as integrating with other notorious frameworks like Quarkus.
You will work with a 100% remote and distributed team.
You will learn about how to write frameworks, how to keep API stable and how to evolve them.
Knowledge pre-requisite: Java
Github repo Infinispan: https://github.com/infinispan/
Github repo Quarkus: https://github.com/quarkusio/
Project size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Katia Aresti <karesti@redhat.com>, Tristan Tarrant<ttarrant@redhat.com>
Associated JBoss community project(s): Quarkus
Summary of idea:
The Infinispan NodeJS client does not support all the media types of caches in the Infinispan server, and does not support search and other features.
Make evolutions to the NodeJS client low lever library to make it possible to improve the API with Typescript
Expected Technologies to be used: javascript and nodejs
Contributor Tasks
- Evolve the Javascript NodeJS client for Infinispan
- Design a better API with TypeScript
Contributor Benefits
You will learn how to implement a low level library with Javascript and TypeScript and how to assure the quality and API design.
Knowledge pre-requisite: Javascript, NodeJS
Github repo Infinispan Client JS Client: https://github.com/infinispan/js-client/
Project size: large (~350 hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Katia Aresti <karesti@redhat.com>, Tristan Tarrant<ttarrant@redhat.com>
Associated JBoss community project(s): Infinispan
Summary of idea
The Infinispan C# client provides a rich set of features to do distributed caching in user applications, but it doesn't currently offer a seamless integration with the .NET Core caching framework.
To improve this aspect, an implementation of the IDistributedCache interface should be provided so that the user can just inject the cache in its application using the .NET Core framework.
Contributor Tasks
Provide an implementation of the Microsoft.Extensions.Caching.Distributed.IDistributedCache interface based on the Infinispan C# .Net Core Client.
Contributor Benefits
You will do C# coding experience and will become familiar with caching, both on .NET Core and Infinispan side.
Knowledge Pre-requisite
C#, .NET Core
Github project
https://github.com/infinispan/Infinispan.Hotrod.Core
Project size: medium (175~hours)
Skill level: Intermediate
Contact(s) / potential mentors(s): Vittorio Rigamonti <vrigamon@redhat.com>, Tristan Tarrant<ttarrant@redhat.com>
Associated JBoss community project(s): Infinispan
Summary of idea
Debezium is an open-source platform for change data capture (CDC) and lets you stream data change events out of a variety of databases such as MySQL, Postgres, SQL Server, MongoDB, and others. The idea of this proposal is to provide a stand-alone tool for compacting the schema history topic used by several Debezium connectors.
Contributor Tasks
Contributor Benefits
You will learn how to build a Quarkus-based application, gain a basic understanding of Apache Kafka, and see how Debezium interfaces with Apache Kafka.
Knowledge Pre-requisite
Java, Git, Maven, and at least one of the databases supported by Debezium
Project Details
Github repo: https://github.com/debezium/debezium
Project size: medium (~175 hours)
Skill level: Intermediate/Advanced
Contact(s) Chris Cranford (ccranfor AT redhat DOT com), Gunnar Morling (gmorling AT redhat DOT com)
Associated JBoss community project(s): Debezium
Summary of idea
Debezium is an open-source platform for change data capture (CDC) and lets you stream data change events out of a variety of databases such as MySQL, Postgres, SQL Server, MongoDB, and others. The idea of this proposal is to port the existing stand-alone main class for the Debezium Cassandra connector to Debezium Server as its runtime environment.
Contributor tasks
Contributor Benefits
You will gain experience working with Debezium Server, a Quarkus-based application, how Debezium integrates with Cassandra including but not limited to the Debezium CDC connector pipeline.
Knowledge Pre-requisite
Java, Git, Maven; ideally Cassandra
Project Details
Github repo: https://github.com/debezium/debezium, https://github.com/debezium/debezium-connector-cassandra
Project size: large (~350 hours)
Skill level: Intermediate/Advanced
Contact(s) Chris Cranford (ccranfor AT redhat DOT com), Gunnar Morling (gmorling AT redhat DOT com)
Associated JBoss community project(s): Debezium
Summary of idea
Debezium is an open-source platform for change data capture (CDC) and lets you stream data change events out of a variety of databases such as MySQL, Postgres, SQL Server, MongoDB, and others. The idea of this proposal is to build out a multi-task, schema-evolution-aware JDBC Kafka Connect sink connector that is capable of ingesting Debezium CDC events and applying those changes to the sink relational database.
Contributor tasks
Contributor Benefits
You will gain experience working with Debezium, understanding its CDC pipeline, relational databases, and how Debezium integrates with Apache Kafka Connect and Apache Kafka frameworks.
Knowledge Pre-requisite
Java, Git, Maven, JDBC, Hibernate; ideally at least one relational database that Debezium Supports.
Project Details
Github repo: https://github.com/debezium/debezium, https://github.com/debezium/debezium-jdbc-sink/
Project size: medium (~350 hours)
Skill level: Intermediate/Advanced
Contact(s) Chris Cranford (ccranfor AT redhat DOT com), Gunnar Morling (gmorling AT redhat DOT com)
Associated JBoss community project(s): Debezium