Important:
This is a research internship, where the majority of work will be about gathering information and writing a design proposal for a network protocol. The actual implementation of the protocol is a non-goal of this internship.
We are building the kotlinx-rpc
library for the Kotlin ecosystem: https://github.com/Kotlin/kotlinx-rpc
This library idea is to gather RPC implementations, provide unified Kotlin first APIs for them and make them work with Kotlin Multiplatform with no additional hassle.
Currently, we have two protocols available: gRPC and kRPC:
gRPC - is a widely used RPC protocol, and we are working heavily now to support it natively in KMP
kRPC - is our in-house Kotlin-first protocol, which was the heart of the original implementation of the library. It is a very simple protocol, which serves some external users for their pet projects as well as some internal JetBrains projects. However, it has a lot of long-standing issues that we want to resolve, and we need to do it all together. Researching the new approach for this protocol will be the goal of this internship.
The goal of this internship will be to conduct a comprehensive research that will outline the new kRPC protocol design and the design of the library APIs supporting the protocol implementation focusing on it being KMP first and documenting the results.
Creating a second gRPC
Creating a general-purpose polyglot RPC protocol
Protocol implementation
The tasks will be:
Establishing the formal requirements for the protocol and the library APIs
Researching other protocol implementations, like gRPC, tRPC, JSON-RPC, RMI, CORBA, etc.
Researching relevant library APIs design questions
Gathering user requests and feedback both internally and externally
Iterating over the design proposal with the team and, optionally, invited experts
In the end we expect the design document to be present with all the relevant topics covered and backed by the extensive research. The aspects of the protocol that will be relevant to the internship project will be decided at the start of the internship and probably will contain a set of most important topics, excluding some others. The research, however, must account for the further developments.
This project is mostly about reading, understanding and writing. In the age of LLMs this presents us a challenge with finding a candidate that can do these things without relying on LLMs. The candidate must understand that ChatGPT is no more than a tool amongst others, and it must not replace all other skills, including but not limited to - thinking.
Expect appropriate checks for that matter before and during the internship.
In the spirit of these requirements: this and other texts on the project's page are written by hand.
Tasks for the project application have a time limit on the platform. Please, fell free to ignore it (while respecting the submission deadline). You can send your solutions via email to me, if you will exceed the platform's time constraint.
Excellent knowledge of the Kotlin language and its best practices
Good knowledge of Kotlin Coroutines
Research skills beyond ChatGPT:
Finding information online using search engines
Reading and understanding RFCs: https://www.rfc-editor.org
Good soft skills, not for the sake of soft skills themselves:
Candidate is to be able to communicate their decisions to the team, explaining them clearly
Candidate is to be able to reason during discussions, making sure their point is heard and that they too understand the opposite opinion if one is presented
Candidate is to be able to reach out, on their own initiative, to other people in JetBrains who might provide them with additional knowledge on the subject
Excellent English reading and writing skills
Good, but not required:
Computer networks knowledge
Java knowledge
Experience in computer science related research (please, tell us about it in your application)
Experience in open-source development