Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Kill YCP by Mechanical Translation
Our famous YaST configuration tool is written in YCP, which is a proprietary programming language. It is a big source of pain for YaST developers and many would like to get rid of it. To achieve this, we started a project to automatically translate the whole YaST codebase into Ruby using a transpiler back in January 2013.
Before Hack Week 9, we are able to completely translate one YaST module (sysconfig). We'd like to use Hack Week to build upon that. More specifically, we'd like to:
- Compile more YaST modules successfully
- Improve quality of generated Ruby code
- David Majda (dmajda)
- Josef Reidinger (jreidinger)
- Martin Vidner (mvidner)
- Ladislav Slezák (lslezak)
- Vladimír Moravec (vmoravec)
Watch our video, which includes a demo (starting at 1:45).
We decided to focus exclusively on the number of compiled modules. At the end of the week, almost 60% of YaST's 150+ modules either compile to Ruby successfully, or we determined they don't need to be compiled at all (e.g. because they don't contain any runnable YCP code). Work on many more modules is in progress. The details are tracked in a spreadsheet and our Trello board.
We'd like to continue on the work in the future. Our (ambitious) goal is to eventually compile all the modules and make YaST in openSUSE 13.1 and SLE 12 completely Ruby-based. This way we won't have to mantain YCP at all, and YaST development & maintenance will be much easier.
Tags: yast, ycp, ruby, transpiler, inprogress, helpwanted
- YCP Killer — tool that manages translation of YCP code in YaST into Ruby, entry point to the whole project
- Y2R — transpiler translating YCP code into Ruby, used by YCP Killer
- YaST Ruby Bindings — YaST Ruby language support, used to make the translated code actually work
It's nice how sometimes things come back and become real after a long time ;-) (see idea from Hack Week 1)