Kill YCP by Mechanical Translation

dmajda edited this page Apr 17, 2013 · 16 revisions


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 also packaged multiple modules in our testing repository. We successfully tested that some of these (like proxy or runlevel) run correctly when installed.

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.

Categories: yast

Tags: yast, ycp, ruby, transpiler, inprogress, helpwanted

Related material

  • 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


by Cornelius

It's nice how sometimes things come back and become real after a long time ;-) (see idea from Hack Week 1)

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.