Duckos
Um sistema operacional do tipo Hobby Unix com um gerenciador de janelas gráfico e aplicativos para PCs x86, com uma porta AARCH64 de trabalho em andamento.

Demo | Recursos | APPS | Portas | Como construir
Em espera
O desenvolvimento de Duckos está atualmente em espera. Sinta -se à vontade para bifurcar e mexer com ele!
Experimente Duckos
Virtualizar localmente
Um lançamento recente pode ser baixado na página de lançamentos. Como alternativa, uma imagem de disco dos mais recentes Duckos pode ser baixada dos artefatos do fluxo de trabalho do Duckos Github. Isso pode ser virtualizado ou emulado usando o QEMU ou seu software de escolha.
Imitar no navegador
Como alternativa, graças ao projeto V86 por cópia, você pode experimentar uma versão do Duckos no seu navegador. Isso é muito mais lento, executando -o localmente e não possui cópias de software portado como Doom . Você pode tentar aqui!
Características
- Um gerenciador de janelas / compositor, além de um kit de ferramentas de interface do usuário baseado em visualização para criar aplicativos
- Uma pilha básica de rede TCP/UDP sobre IP com soquetes Unix e um driver E1000 Ethernet
- Suporte sonoro para cartões de som AC97
- Muitos portos de programas como Doom, utilitários como GCC e bibliotecas como SDL
- Link e carregamento dinâmico de binários
- Recursos de depuração a bordo como PTRACE e um Profiler de Amostragem
- Uma biblioteca de renderização 3D de software
- Corre em algum hardware real
- Uma porta WIP AARCH64 que passa pelo estágio 1 em um Raspberry Pi 3b :)
Planos futuros
- Termine a porta AARCH64
- Renovar o sistema IPC do kernel para ser mais eficiente
- Melhor renderização de fontes (fontes vetoriais, tamanhos diferentes, etc.)
- auto-hospedeiro
- Mais estabilidade e velocidade
- Uma melhor implementação de cache do sistema de arquivos que pode libertar a memória quando necessário e periodicamente descarregar gravações
- Mais testes de unidade de kernel e userspace
- Melhor documentação de kernel, bibliotecas e aplicativos
- Algumas ferramentas de depuração de Kernel & Userspace, para que eu não precise passar horas até os joelhos no depurador Qemu sempre que um segfault acontece devido a um bug simples que poderia ter sido evitado com um café extra no meu sistema
- Suporte multiprocessador (multicore)
- Faça a transição lentamente de vários módulos do kernel para o espaço dos usuários (A la Microkernel)
- Adicione a ferrugem na mistura (?)
Serviços
O código para estes pode ser encontrado nos serviços.
- Init (/bin/init): o sistema init para puckos.
- Pond (/bin/lagoa): o gerenciador de janelas/compositor de puckos.
- Quack (/bin/charlatão): o servidor de som para puckos.
- Cliente DHCP (/bin/dhcpclient): um cliente DHCP para atribuir um endereço IP.
Aplicativos
O código para estes pode ser encontrado em programas/aplicativos.
- Calculadora (/apps/calculator.app): uma calculadora básica.
- Terminal (/apps/terminal.app): uma aplicação de terminal baseada em Libui.
- Monitor do sistema (/apps/monitor.app): um monitor de sistema básico mostrando a memória e a utilização da CPU.
- 4 em uma fileira (/apps/4inarw.app): um jogo básico de quatro em uma fila. Brinque com dois jogadores ou contra o computador.
- Sandbar (/bin/Sandbar): uma "barra de tarefas" básica que exibe uma linha de botões na parte inferior da tela para iniciar aplicativos.
- Arquivos (/apps/files.app): um aplicativo de explorador de arquivos rudimentares.
- Visualizador (Apps/Viewer.App): Um visualizador de mídia básico que pode visualizar imagens e reproduzir arquivos de som
- Lib3d Demo (Apps/3Demo.App): uma demonstração para a biblioteca Lib3D. Exibe um cubo por padrão; pode ser usado para visualizar arquivos OBJ.
- Editor (/apps/editor.app): um aplicativo básico para editar arquivos de texto.
- Sobre (/apps/about.app): mostra algumas informações do sistema.
- Ducksweeper (/apps/ducksweeper.app): um jogo de evitação de pato baseado em grade;)
Programas da CLI
O código para estes pode ser encontrado em programas/coreUtils. Juntamente com os suspeitos usuais, Duckos tem:
- dsh (/bin/dsh): um shell básico com suporte para tubulação, redirecionamentos e recall de comando.
- Abrir (/bin/aberto): um utilitário para abrir arquivos e aplicativos da linha de comando usando o programa apropriado.
- play (/bin/play): reproduz arquivos de áudio.
- Data (/bin/data): mostra a data e a hora.
- Perfil (/bin/perfil): perfis um aplicativo em execução e produz um arquivo compatível com FlameGraph/Speedscope.
- Você pode executar
scripts/debugd.py no host (com o SpeedScope instalado) e passar o parâmetro -r para o perfil para enviar a saída diretamente para o host via rede de rede e abri -lo no SpeedScope.
Os programas que assumem argumentos fornecerão o uso correto quando você os executa sem argumentos.
Bibliotecas
- LIBC: a biblioteca C padrão.
- LIBM: A parte matemática da biblioteca padrão C.
- LibPond: a biblioteca usada para interface com o Pond Window Manager / Compositor.
- LibGraphics: uma biblioteca que fornece alguns utilitários para trabalhar com gráficos, como o carregamento de formato de imagem.
- libui: uma estrutura de interface do usuário para aplicativos.
- Libtui: uma estrutura para aplicações de terminais.
- Libterm: uma estrutura para lidar com terminais.
- LIBDUCK: Uma biblioteca que contém classes e utilitários usados, como argumento e análise de arquivos de configuração.
- Libriver: Uma biblioteca IPC não é diferente do D-Bus, que fornece uma estrutura para chamadas de função remota e passagem de dados.
- Libapp: uma biblioteca que fornece métodos para recuperar informações sobre aplicativos instalados e em execução.
- Libsys: fornece abstrações C ++ de nível mais alto para recuperar informações do sistema, a saber, a partir de procfs.
- Libsound: fornece uma estrutura para aplicativos de áudio e interface com o servidor de som, Quack.
- LIB3D: fornece funcionalidade básica de renderização 3D de software.
- LibMatrix: fornece utilitários matemáticos da matriz.
- Libexec: fornece suporte ao ELF.
- Libdebug: fornece funcionalidade de depuração.
Portas
As portas podem ser instaladas em execução de portas.sh fornecidas com a porta desejada como argumento. As dependências necessárias também serão construídas e instaladas.
Algumas das portas mais emocionantes são:
- RUÍNA
- Você precisará fornecer seu próprio Doom Wadfile e colocá -lo no diretório /apps/doom.app/. (Consulte as instruções de construção para obter mais detalhes.)
- Binutils
- GCC
- SDL2
- Além disso, sdl2_gfx, sdl2_image e sdl2_ttf
Construção / corrida
- Consulte Instruções.MD para obter instruções.
Contribuindo
- Consulte Contribuindo.md para obter informações sobre como contribuir com Duckos.
Créditos
- O espelho de Blanham do Liballoc 1.1 para a implementação de alocação de heap de kernel (é um domínio aberto; portanto, se você quiser usá -lo, eu recomendo)
- Serenityos para muita inspiração
- Gohufont para a fonte (licenciada sob WTFPL)
Licença