====== Porting Microsoft's CoreCLR, CoreFX, and PowerShell to FreeBSD ====== * Student: Mateus de Morais (mateus@mateus.tech) * Mentors: * David Naylor (dbn@freebsd.org) * David Chisnall (theraven@freebsd.org) ===== Project title ===== Porting the .NET Core SDK & Runtime and %%PowerShell%% to the %%FreeBSD%% operating system. ===== Project description & Approach to solving the problem ===== The idea is to ultimately port %%PowerShell%% to %%FreeBSD%%. But, in order to achieve that, porting the %%CoreCLR%% and %%CoreFX%% libraries -- as well as other .NET Core SDK dependencies -- is necessary for they are vital components for %%PowerShell%% to build and function. There’s already work in progress related to porting %%CoreCLR%% and %%CoreFX%% to %%FreeBSD%%, so this should represent a starting point for this effort. After that, with all the .NET Core SDK toolchain ported, the effort will be focused on building %%PowerShell%%. With those completed, the aim will be towards packaging the utilities to make them available in the ports tree. There are already Linux %%PowerShell%% binaries ready for use and some ideas or implementations should be derived from there. %%PowerShell%%, as well as the %%CoreCLR%% and %%CoreFX%% projects, are open-sourced, therefore working with their teams at Microsoft isn’t a barrier, should some work on their side render necessary, or some code upstreaming need to be done, for this project to be successful. The first step towards solving the problem will be to understand the components needed to build the .NET Core runtime and the SDK -- since they are developed individually with their own %%GitHub%% repositories. After that, the efforts will be directed towards actually building these components on %%FreeBSD%% in order to get a functional runtime and SDK. Once this is done, all the efforts will be directed towards getting %%PowerShell%% to build and function on the %%FreeBSD%% platform. ===== Deliverables ===== * **.NET Core Runtime Port** * **.NET Core SDK Port** * **%%PowerShell%% Port** ===== Milestones ===== * May 14th: Start of coding * Gather information on necessary components for runtime and SDK ✔ * May 21st - June 11th * Build these components on %%FreeBSD%% to get a functional runtime and SDK ✔ * Document process to build the port later ✔ * June 11th - June 15th: Mid-term Evaluations #1 * June 16th - July 9th * Test built components along the way for runtime and SDK and fine-tuning ✔ * Start working on the %%PowerShell%% build ✔ * Document the process to build the port later ✔ * July 9th - July 13th: Mid-term Evaluations #2 * July 13th - August 6th: * Test results for %%PowerShell%% on %%FreeBSD%% and fine-tuning ✔ * Work on the ports for the runtime, SDK, and %%PowerShell%% ✔ * August 6th: End of coding (soft) * Debug and finish code and complete documentation ✔ * August 14th: End of coding (hard) ===== Test Plan ===== This test plan is initial and may change later * Building %%CoreCLR%%, %%CoreFX%%, CLI (.NET Core SDK) * Run tests that come with the code * Building %%PowerShell%% * Run tests that come with the code * Gather a list of most common commands, can they be run successfully? * Writing the Ports * Are they functional on freshly-installed %%FreeBSD%% systems? ===== The Code ===== * Forks * %%CoreFX%%: https://github.com/mateusrodrigues/corefx * %%PowerShell%%-Native: https://github.com/mateusrodrigues/PowerShell-Native * %%FreeBSD%% Review * https://reviews.freebsd.org/D16707 ===== Notes ===== * Experimental Runtime/SDK builds: * Based on //2.2.100-preview1-008958// available [[http://distcache.FreeBSD.org/local-distfiles/dbn/dotnet/dotnetcli-freebsd.11-x64.zip|here]] * Based on //3.0.100-preview1-009019// available [[http://distcache.freebsd.org/local-distfiles/dbn/dotnet/dotnet-freebsd-3.0.100-preview1-009019.tar.gz|here]] * Progress tracking and build documentation * https://github.com/mateusrodrigues/gsoc18-progress * https://github.com/dotnet/coreclr/issues/18067 ===== Useful links ===== * https://github.com/dotnet