diff --git a/src/lib66/exec/ssexec_main.c b/src/lib66/exec/ssexec_main.c
deleted file mode 100644
index 1d198af28ce2376ab04f3a137813d06725903be0..0000000000000000000000000000000000000000
--- a/src/lib66/exec/ssexec_main.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * ssexec_main.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/obgetopt.h>
-#include <oblibs/log.h>
-#include <oblibs/string.h>
-
-#include <skalibs/sgetopt.h>
-#include <skalibs/types.h>
-
-#include <66/ssexec.h>
-#include <66/utils.h>
-#include <66/tree.h>
-#include <66/constants.h>
-
-int ssexec_set_treeinfo(ssexec_t *info)
-{
-    log_flow() ;
-
-    int r = tree_sethome(info) ;
-    if (r <= 0) goto out ;
-
-    if (!tree_get_permissions(info->tree.s,info->owner))
-        r = -4 ;
-
-    info->treeallow = 1 ;
-
-    out:
-    return r ;
-}
-
-void ssexec_set_info(ssexec_t *info)
-{
-    log_flow() ;
-
-    int r ;
-
-    info->owner = MYUID ;
-    info->ownerlen = uid_fmt(info->ownerstr,info->owner) ;
-    info->ownerstr[info->ownerlen] = 0 ;
-
-    if (!set_ownersysdir(&info->base,info->owner)) log_dieusys(LOG_EXIT_SYS, "set owner directory") ;
-
-    if (!info->skip_opt_tree) {
-
-        r = ssexec_set_treeinfo(info) ;
-        if (r == -4) log_die(LOG_EXIT_USER,"You're not allowed to use the tree: ",info->tree.s) ;
-        if (r == -3) log_dieu(LOG_EXIT_USER,"find the current tree. You must use the -t options") ;
-        if (r == -2) log_dieu(LOG_EXIT_USER,"set the tree name") ;
-        if (r == -1) log_dieu(LOG_EXIT_USER,"parse seed file") ;
-        if (!r) log_dieusys(LOG_EXIT_SYS,"find tree: ", info->treename.s) ;
-
-    }
-
-    r = set_livedir(&info->live) ;
-    if (!r) log_die_nomem("stralloc") ;
-    if(r < 0) log_die(LOG_EXIT_SYS,"live: ",info->live.s," must be an absolute path") ;
-
-    if (!stralloc_copy(&info->scandir,&info->live)) log_die_nomem("stralloc") ;
-
-    r = set_livescan(&info->scandir,info->owner) ;
-    if (!r) log_die_nomem("stralloc") ;
-    if(r < 0) log_die(LOG_EXIT_SYS,"scandir: ",info->scandir.s," must be an absolute path") ;
-}
-
-static inline void info_help (char const *help,char const *usage)
-{
-    log_flow() ;
-
-    DEFAULT_MSG = 0 ;
-
-    log_info(usage,"\n",help) ;
-}
-
-static inline void append_opts(char *opts,size_t baselen, ssexec_func_t *func)
-{
-    if ((*func) == &ssexec_parse)
-        auto_strings(opts + baselen,OPTS_PARSE) ;
-    else if ((*func) == &ssexec_init)
-        auto_strings(opts + baselen,OPTS_INIT) ;
-    else if ((*func) == &ssexec_enable)
-        auto_strings(opts + baselen,OPTS_ENABLE) ;
-    else if ((*func) == &ssexec_disable)
-        auto_strings(opts + baselen,OPTS_DISABLE) ;
-    else if ((*func) == &ssexec_start)
-        auto_strings(opts + baselen,OPTS_START) ;
-    else if ((*func) == &ssexec_stop)
-        auto_strings(opts + baselen,OPTS_STOP) ;
-    else if ((*func) == &ssexec_svctl)
-        auto_strings(opts + baselen,OPTS_SVCTL) ;
-    else if ((*func) == &ssexec_env)
-        auto_strings(opts + baselen,OPTS_ENV) ;
-    else if ((*func) == &ssexec_all)
-        auto_strings(opts + baselen,OPTS_ALL) ;
-    else if ((*func) == &ssexec_tree)
-        auto_strings(opts + baselen,OPTS_TREE) ;
-}
-
-int ssexec_main(int argc, char const *const *argv,char const *const *envp,ssexec_func_t *func, ssexec_t *info)
-{
-    log_flow() ;
-
-    int r, n = 0, i = 0 ;
-    char const *nargv[argc + 1] ;
-
-    log_color = &log_color_disable ;
-
-    /** 30 options should be large enough */
-    char opts[30] ;
-    char const *main = "hv:l:t:T:z" ;
-    char str[UINT_FMT] ;
-    size_t mainlen = strlen(main) ;
-
-    auto_strings(opts,main) ;
-
-    append_opts(opts,mainlen,func) ;
-
-    nargv[n++] = "fake_name" ;
-    {
-        subgetopt l = SUBGETOPT_ZERO ;
-
-        int f = 0 ;
-        for (;;)
-        {
-            int opt = subgetopt_r(argc,argv, opts, &l) ;
-
-            if (opt == -1) break ;
-            switch (opt)
-            {
-                case 'h' :  info_help(info->help,info->usage); return 0 ;
-                case 'v' :  if (!uint0_scan(l.arg, &VERBOSITY)) log_usage(info->usage) ;
-                            info->opt_verbo = 1 ;
-                            break ;
-                case 'l' :
-
-                    str[uint_fmt(str, SS_MAX_PATH)] = 0 ;
-
-                    if (strlen(l.arg) > SS_MAX_PATH)
-                        log_die(LOG_EXIT_USER,"live path is too long -- it can not exceed ", str) ;
-
-                    if (!auto_stra(&info->live,l.arg))
-                        log_die_nomem("stralloc") ;
-
-                    info->opt_live = 1 ;
-                    break ;
-
-                case 't' :
-
-                    str[uint_fmt(str, SS_MAX_TREENAME)] = 0 ;
-
-                    if (strlen(l.arg) > SS_MAX_TREENAME)
-                        log_die(LOG_EXIT_USER,"tree name is too long -- it can not exceed ", str) ;
-
-                    if (!auto_stra(&info->treename,l.arg))
-                        log_die_nomem("stralloc") ;
-
-                    info->opt_tree = 1 ;
-                    info->skip_opt_tree = 0 ;
-                    break ;
-
-                case 'T' :  if (!uint0_scan(l.arg, &info->timeout)) log_usage(info->usage) ;
-                            info->opt_timeout = 1 ;
-                            break ;
-                case 'z' :  log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
-                            info->opt_color = 1 ;
-                            break ;
-                default :
-                            for (i = 0 ; i < n ; i++) {
-
-                                if (!argv[l.ind])
-                                    log_usage(info->usage) ;
-
-                                if (l.arg) {
-
-                                    if (!strcmp(nargv[i],argv[l.ind - 2]) || !strcmp(nargv[i],l.arg))
-                                        f = 1 ;
-
-                                } else {
-
-                                    if (!strcmp(nargv[i],argv[l.ind]))
-                                        f = 1 ;
-                                }
-                            }
-
-                            if (!f) {
-
-                                if (l.arg) {
-                                    // distinction between e.g -enano and -e nano
-                                    if (argv[l.ind - 1][0] != '-')
-                                        nargv[n++] = argv[l.ind - 2] ;
-
-                                    nargv[n++] = argv[l.ind - 1] ;
-
-                                } else {
-
-                                    nargv[n++] = argv[l.ind] ;
-                                }
-                            }
-                            f = 0 ;
-                            break ;
-            }
-        }
-        argc -= l.ind ; argv += l.ind ;
-    }
-
-    ssexec_set_info(info) ;
-
-    for (i = 0 ; i < argc ; i++ , argv++)
-        nargv[n++] = *argv ;
-
-    nargv[n] = 0 ;
-
-    r = (*func)(n, nargv, info) ;
-
-    ssexec_free(info) ;
-
-    return r ;
-}