Skip to content

dotnet/runtimelab repo proposal #35609

@jkotas

Description

@jkotas

Encouraging .NET Runtime Experiments

Experimentation with new ideas is essential for successful innovation. However, we do not have a consistent or successful pattern for running larger scale experimental projects based on the .NET runtime today. For lack of better options, .NET runtime experiments live in dotnet/runtime directly (Utf8String) or in separate repo with unclear messaging (CoreRT). This discourages innovation and creates confusion among both our team and customers. That's the opposite of what we want.

We need to establish a pattern to run experimental projects that:

  • Maintains a clean separation between experimental and shipping projects, for all source code, issue tracking, engineering system and public perception.
  • Allows experimental projects to focus on their unique value, while leveraging as much code as possible from dotnet/runtime, and engaging whomever they want to participate/collaborate.
  • Encourages fixes and improvements (that may be required to enable the experiment, but are valuable in general) to go directly to dotnet/runtime:master.

We are proposing to create a new dotnet/runtimelab repo as a shared place to hosts experimental projects based on the .NET runtime. This repo is going to be a fork of dotnet/runtime. Each experiment is going to live in its own branch in this repo. The master branch of dotnet/runtimelab is going to have the list of experiments and the branches they use to help with discoverability.

Questions and Answers

How is this different from dotnet/corefxlab?

The spirit is the same as with corefxlab. The key differences are that this spans the whole .NET runtime and that the experiments can be done across full stack by leveraging code from dotnet/runtime. The active experiments from corefxlab will be moved to runtimelab, and corefxlab repo will be archived.

Where are the experimental packages from runtimelab going to be published?

The packages are going to be published to dedicated NuGet feed. The packages are not going to be published to nuget.org. Same as corefxlab today. We only publish packages to nuget.org that we can commit to customers using in production apps.

What is the support policy for experimental projects?

The packages from dotnet/runtimelab are not supported by the .NET team for use in production. The packages published by dotnet/runtimelab do not have stable releases nor receive servicing fixes. Same as corefxlab today.

Do all experiments need to be done in runtimelab?

It is still fine to do small scale experiments in dotnet/runtime directly if:

  • The experiment contains modest amount of code (no more than several thousand lines)
  • The experiment is off by default and activated via configuration switch
  • The experiment does not introduce any new public APIs or NuGet packages

An example of a small scale experiment that is perfectly fine to do in dotnet/runtime directly is ValueTask Pooling.

What does qualify the experiment to be included in dotnet/runtimelab?

The experiment must be sponsored by a dotnet/runtime contributor with commit permissions who has enough time to run it. The contributor and commit right permission model for the dotnet/runtimelab is identical to dotnet/runtime.

How does an experiment grow into a shipping .NET runtime feature?

The process for this is no different from ordinary features. The experiment has to demonstrate its value, public APIs need to go through API review, etc. Logistically, the relevant code is manually copied from dotnet/runtimelab to dotnet/runtime and deleted in dotnet/runtimelab. Same as corefxlab today.

What happens with dotnet/corert?

The Native AOT form-factor CoreRT project, based on the CoreCLR GC and RyuJIT, is going to be one of experiments hosted in dotnet/runtimelab. This is different from the plan published in Consolidating .NET GitHub Repos announcement.

What is going to be the engineering system for dotnet/runtimelab?

The engineering system for dotnet/runtimelab is going to be focused on ensuring that the experimental projects are usable and not completely broken. It is not going to guarantee high quality across all platforms. As such, it is going be much more lightweight compared to the engineering system of dotnet/runtime.

If an experiment requires additional validation, it will be addressed on a case-by-case basis.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions