Sto sviluppando un'applicazione incorporata su una piattaforma ARM. Voglio usare ArchLinux come sistema operativo sottostante e quindi creare la mia GUI personale. Voglio che l'applicazione sia estensibile (possiedi app se lo desideri).
Voglio essere in grado di eseguire queste app di terze parti in una sandbox per limitare i problemi di sicurezza. Voglio che gli sviluppatori abbiano la massima libertà possibile senza dare accesso a funzionalità potenzialmente pericolose. Devo anche essere in grado di sovrapporre le barre degli strumenti sulle app quando i colpi si verificano dai lati (pensa Android quando sei in un'app a schermo intero, ma se scorri lateralmente, puoi comunque aprire la barra delle notifiche di Android e Android pulsanti di navigazione).
Il modo in cui vedo le cose al momento, vorrei che la mia applicazione fosse in esecuzione e quando si carica guarderebbe in una directory per vedere tutte le "app" installate. Le app avrebbero ciascuna una propria cartella. Quindi, quando un utente esegue un'app, vorrei:
fork - > cambia directory root nella directory app - > imposta l'ID utente dell'app a un utente con privilegi bassi - > exec app - > ritorna l'output grafico della pipa all'app principale.
Quando dico retro pipe output, intendo letteralmente stream come un video attraverso una pipe.
Quindi posso usare ptrace per rintracciare ciò che stanno facendo le applicazioni e riprendere il controllo se l'applicazione per bambini si interrompe o si chiude o qualcosa del genere. Questo metodo mi consente anche di sovrapporre le mie cose quando necessario.
La mia preoccupazione principale in questo momento è rappresentata dalle prestazioni se l'app deve reindirizzare l'output grafico al programma principale.
Questa è una soluzione valida o è ingenua? L'altra opzione che sto vedendo è in realtà creare un'API grafica con file XML a la Android e quindi il rendering avverrebbe dall'interno dell'applicazione principale. L'applicazione principale caricava i file di layout XML dalla directory delle app e rendeva il contenuto stesso. Ciò richiederebbe molto più tempo per occuparsene e trattenerebbe un po 'di più gli sviluppatori.
Qualsiasi input è apprezzato, specialmente se hai esperienza con le applicazioni modulari.