Code Monkey home page Code Monkey logo

serenityos / serenity Goto Github PK

View Code? Open in Web Editor NEW
28.8K 349.0 3.1K 208.63 MB

The Serenity Operating System 🐞

Home Page: https://serenityos.org

License: BSD 2-Clause "Simplified" License

C++ 88.19% C 0.77% Makefile 0.01% Assembly 0.12% Shell 0.84% HTML 3.09% CSS 0.06% CMake 0.82% JavaScript 4.88% Dockerfile 0.01% Python 0.34% Game Maker Language 0.44% NASL 0.01% Lua 0.01% Nix 0.01% Zig 0.01% Java 0.01% Objective-C++ 0.41% GLSL 0.01% Objective-C 0.03%
operating-system c-plus-plus os unix desktop-environment kernel browser

serenity's Introduction

SerenityOS

Graphical Unix-like operating system for x86-64 computers.

GitHub Actions Status Azure DevOps Status Fuzzing Status Sonar Cube Static Analysis Discord

FAQ | Documentation | Build Instructions

About

SerenityOS is a love letter to '90s user interfaces with a custom Unix-like core. It flatters with sincerity by stealing beautiful ideas from various other systems.

Roughly speaking, the goal is a marriage between the aesthetic of late-1990s productivity software and the power-user accessibility of late-2000s *nix. This is a system by us, for us, based on the things we like.

You can watch videos of the system being developed on YouTube:

Screenshot

Screenshot as of c03b788.png

Features

  • Modern x86 64-bit kernel with pre-emptive multi-threading
  • Browser with JavaScript, WebAssembly, and more (check the spec compliance for JS, CSS, and Wasm)
  • Security features (hardware protections, limited userland capabilities, W^X memory, pledge & unveil, (K)ASLR, OOM-resistance, web-content isolation, state-of-the-art TLS algorithms, ...)
  • System services (WindowServer, LoginServer, AudioServer, WebServer, RequestServer, CrashServer, ...) and modern IPC
  • Good POSIX compatibility (LibC, Shell, syscalls, signals, pseudoterminals, filesystem notifications, standard Unix utilities, ...)
  • POSIX-like virtual file systems (/proc, /dev, /sys, /tmp, ...) and ext2 file system
  • Network stack and applications with support for IPv4, TCP, UDP; DNS, HTTP, Gemini, IMAP, NTP
  • Profiling, debugging and other development tools (Kernel-supported profiling, CrashReporter, interactive GUI playground, HexEditor, HackStudio IDE for C++ and more)
  • Libraries for everything from cryptography to OpenGL, audio, JavaScript, GUI, playing chess, ...
  • Support for many common and uncommon file formats (PNG, JPEG, GIF, MP3, WAV, FLAC, ZIP, TAR, PDF, QOI, Gemini, ...)
  • Unified style and design philosophy, flexible theming system, custom (bitmap and vector) fonts
  • Games (Solitaire, Minesweeper, 2048, chess, Conway's Game of Life, ...) and demos (CatDog, Starfield, Eyes, mandelbrot set, WidgetGallery, ...)
  • Every-day GUI programs and utilities (Spreadsheet with JavaScript, TextEditor, Terminal, PixelPaint, various multimedia viewers and players, Mail, Assistant, Calculator, ...)

... and all of the above are right in this repository, no extra dependencies, built from-scratch by us :^)

Additionally, there are over three hundred ports of popular open-source software, including games, compilers, Unix tools, multimedia apps and more.

How do I read the documentation?

Man pages are available online at man.serenityos.org. These pages are generated from the Markdown source files in Base/usr/share/man and updated automatically.

When running SerenityOS you can use man for the terminal interface, or help for the GUI.

Code-related documentation can be found in the documentation folder.

How do I build and run this?

See the SerenityOS build instructions. Serenity runs on Linux, macOS (aarch64 might be a challenge), Windows (with WSL2) and many other *Nixes with hardware or software virtualization.

Get in touch and participate!

Join our Discord server: SerenityOS Discord

Before opening an issue, please see the issue policy.

A general guide for contributing can be found in CONTRIBUTING.md.

Authors

And many more! See here for a full contributor list. The people listed above have landed more than 100 commits in the project. :^)

License

SerenityOS is licensed under a 2-clause BSD license.

serenity's People

Contributors

adkaster avatar alimpfard avatar atkinssj avatar awesomekling avatar benwiederhake avatar bertaland avatar bgianfo avatar bugaevc avatar gmta avatar gunnarbeutner avatar hendiadyoin1 avatar idanho avatar itamar8910 avatar kalenikaliaksandr avatar kennethmyhra avatar kleinesfilmroellchen avatar krkk avatar linusg avatar lubrsi avatar lucaschollet avatar macdue avatar mattco98 avatar nico avatar shannonbooth avatar supercomputer7 avatar tcl3 avatar thankyouverycool avatar timschumi avatar tomuta avatar trflynn89 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

serenity's Issues

Need a faster malloc()

It appears that the primary cause of GCC slowness is malloc() slowness. So we need a faster malloc(). Let's write one.

Move symbolication into userspace somehow

Perhaps a crash handler daemon could be notified when a process crashes, and symbolicate the backtrace somehow?
We would need a few things to be able to build this:

  • A userspace flavor of the ELF loader code. This will be needed eventually anyway when implementing dynamic linking.
  • Some kind of notification system to let us know there was a crash
  • Some way for the crash handler to remotely inspect the stack of the crashed process
  • Some way for the crash handler to dump the memory map of the crashed process

Dynamic libraries

It would be good to support dynamic linking so we don't have to relink everything whenever libc changes.

Userland: Login records (utmp/wtmp)

We should have a utmp file that tell us who's logged in to the system.
It should be updated on login/logout, and we should have a "w" and maybe a "who" program to show what's in the file.

We could also have a wtmp file with historical utmp records, and a "last" program to dump it.

Running Serenity on Arch Linux, using the `run` script

After building Serenity with this command:

(export LC_ALL=en_US.UTF-8; cd Toolchain && ./BuildIt.sh && source ./UseIt.sh && cd ../Kernel && ./makeall.sh)

I am trying to run it:

Kernel/run

Which gives this error message:

qemu-system-i386: -hda _fs_contents: Could not open '_fs_contents': No such file or directory

Entering the Kernel directory manually and running run, results in this error message:

WARNING: Image format was not specified for '_fs_contents' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
CPU Reset (CPU 0)
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EIP=00000000 EFL=00000000 [-------] CPL=0 II=0 A20=0 SMM=0 HLT=0
ES =0000 00000000 00000000 00000000
CS =0000 00000000 00000000 00000000
SS =0000 00000000 00000000 00000000
DS =0000 00000000 00000000 00000000
FS =0000 00000000 00000000 00000000
GS =0000 00000000 00000000 00000000
LDT=0000 00000000 00000000 00000000
TR =0000 00000000 00000000 00000000
GDT=     00000000 00000000
IDT=     00000000 00000000
CR0=00000000 CR2=00000000 CR3=00000000 CR4=00000000
DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
DR6=00000000 DR7=00000000
CCS=00000000 CCD=00000000 CCO=DYNAMIC
EFER=0000000000000000
FCW=0000 FSW=0000 [ST=0] FTW=ff MXCSR=00000000
FPR0=0000000000000000 0000 FPR1=0000000000000000 0000
FPR2=0000000000000000 0000 FPR3=0000000000000000 0000
FPR4=0000000000000000 0000 FPR5=0000000000000000 0000
FPR6=0000000000000000 0000 FPR7=0000000000000000 0000
XMM00=00000000000000000000000000000000 XMM01=00000000000000000000000000000000
XMM02=00000000000000000000000000000000 XMM03=00000000000000000000000000000000
XMM04=00000000000000000000000000000000 XMM05=00000000000000000000000000000000
XMM06=00000000000000000000000000000000 XMM07=00000000000000000000000000000000
qemu-system-i386: Initialization of device ide-hd failed: Could not reopen file: Permission denied

This is with qemu version 4.0.0.

Cant compile Lua

Im trying to compile Lua and got stuck.Here is what i did.

I changed CC=gcc to CC= i686-pc-serenity-gcc -std=gnu99 in /lua/src/Makefile

cd /lib/gcc/i686-pc-serenity/8.3.0/include/readline
mkdir readline
sudo cp /usr/include/readline/* . //install libreadline for serenity gcc

cd /home/mustafa/src/lua/src/
make linux // i guess this is correct option?

At this point compilations fails with this error

make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline" 
make[1]: Entering directory '/home/mustafa/src/lua/src' 
i686-pc-serenity-gcc -std=gnu99 -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline
/opt/cross/lib/gcc/i686-pc-serenity/8.3.0/../../../../i686-pc-serenity/bin/ld: cannot find -ldl 
/opt/cross/lib/gcc/i686-pc-serenity/8.3.0/../../../../i686-pc-serenity/bin/ld: cannot find -lreadline
collect2: error: ld returned 1 exit status
Makefile:63: recipe for target 'lua' failed 
make[1]: *** [lua] Error 1
make[1]: Leaving directory '/home/mustafa/src/lua/src'
Makefile:110: recipe for target 'linux' failed
make: *** [linux] Error 2

Building Serenity on Arch Linux

When cloning the serenity repo and running this command:

(export LC_ALL=en_US.UTF-8; cd Toolchain; ./BuildIt.sh; chmod +x UseIt.sh; ./UseIt.sh; cd ../Kernel; ./makeall.sh) 1> output.log 2> error.log

These errors appears:

/bin/sh: i686-pc-serenity-g++: command not found
/bin/sh: i686-pc-serenity-g++: command not found
/bin/sh: i686-pc-serenity-g++: command not found
make: *** [Makefile:69: ../AK/StringImpl.o] Error 127
make: *** Waiting for unfinished jobs....
make: *** [Makefile:69: ../AK/String.o] Error 127
/bin/sh: i686-pc-serenity-g++: command not found
make: *** [Makefile:69: ../AK/StringView.o] Error 127
/bin/sh: i686-pc-serenity-g++: command not found
make: *** [Makefile:69: ../AK/StringBuilder.o] Error 127
make: *** [Makefile:69: ../AK/FileSystemPath.o] Error 127
/bin/sh: i686-pc-serenity-g++: command not found
/bin/sh: i686-pc-serenity-g++: command not found
make: *** [Makefile:69: ../AK/MappedFile.o] Error 127
make: *** [Makefile:69: ../AK/StdLibExtras.o] Error 127
/bin/sh: i686-pc-serenity-g++: command not found
make: *** [Makefile:69: SharedBuffer.o] Error 127

Attaching output.log and error.log.

This is on Arch Linux, x86, 64-bit, with gcc 8.3.0.

output.log
error.log

Userland: Add "killall"

We should have a /bin/killall that sends a given signal to every process with a certain name.

GFilePicker should allow double click to select

I guess this might mean another concept rather than just activation. Perhaps selection (single click, arrows) vs activation (double click/enter key)? Either way, it would make it much nicer to use.

Clicking & Dragging is nearly impossible

When I try to click&drag anything with the mouse, it basically doesn't work most of the time, misinterpreted it as clicks the other 5%, and the last 1% of the time it actually works. I'm not really sure how we would go about fixing this, but I have two guesses as to what's wrong:

  1. the heuristics for what's a click vs whats a drag need tweaking
  2. my VM is broken in some way.

Internet connection not working

I cloned, built, and ran SerenityOS this morning and it doesn't seem to be able to connect to the internet correctly. If I run ping 127.0.0.1 (localhost) it works, but if I try ping 8.8.8.8 the request times out and if I attempt ping google.com it tells me that the lookup failed:

2019-05-23-105907_1029x771_scrot

I'm not sure what I need to do at this point, I'm assuming its a problem with setting up QEMU? Also, this brings up another thing, when the IRC client can't connect to the internet it just freezes the entire OS, so that's something that needs to be fixed:

2019-05-23-110134_1270x1406_scrot

I planned on contributing to the userland of this OS at first (maybe starting with getting the FileManager forward/back arrows to work: #36, or getting the ProcessManager tree view #65) and then working up to maybe contributing to the more lower level stuff. So if there's something that needs to be fixed here I'd like to help.

What is the preferred configuration format?

I'm not sure where else to ask this, but I'm working on making a config file for the Launcher app, so you can tell it what applications it should show, and their associated icons (instead of hardcoding it), and whether to run them straight (as a GUI app) or through a terminal. However, before I get started on this, we obviously need to know, what the config format should be.

I'm also going to work on a settings manager next, so that also should use whatever config format we decide on. And if we decide on something general enough, we could use it for the UI builder too.

Kernel: Region should only cause pages within its window to be retained

A Region is meant to function as a "view" onto a VMObject, but because it currently retains the entire VMObject, it effectively causes all of the VMObject's physical pages to be retained for the lifetime of the Region.

This means that a small Region can end up retaining a huge number of physical pages, as long as they were at some point mapped into the VMObject.

Ports: Add "doom"

As you may know no operating system is a real system without having a port of Doom running on it.

I think the easiest way to achieve this would be to port PrBoom and its only dependency, SDL 1.2. This engine only requires working video and input backend from SDL, having the other audio, networking, etc. backends are not a hard requirement.

PrBoom website: http://prboom.sourceforge.net/
SDL 1.2: https://www.libsdl.org/download-1.2.php

Also I've worked on porting Doom for Redox in the past. You may want to take a look at how we patched SDL to add a new backend for our Orbital display server. Could help bringing SDL to Serenity: https://gitlab.redox-os.org/redox-os/cookbook/tree/master/recipes/sdl

Create helper to parse /proc/all

We need sometimes to use paths like /proc/all (see source code of pidof, killall...).
It would be nice to make a helper function that everyone can use instead of manually using it everywhere.

This helper could be used to retrieve a String or directly a CFile.

Can't build using the BuildIt file

Hi there, I'm interested in this project so I tried building it. I tried on Manjaro, a Ubuntu 18.10 virtual machine, and an Ubuntu 18.04.2 Windows subsystem. I'm probably just missing a dependency but maybe the script can be altered to check for that? The error I get on all operating systems:

make[2]: Entering directory '/home/wdd/serenity/Toolchain/Build/gcc/i686-pc-serenity/libgcc'
if [ -z "" ]; then \
  true; \
else \
  rootpre=`${PWDCMD-pwd}`/; export rootpre; \
  srcrootpre=`cd /home/wdd/serenity/Toolchain/Tarballs/gcc-8.3.0/libgcc; ${PWDCMD-pwd}`/; export srcrootpre; \
  lib=`echo "${rootpre}" | sed -e 's,^.*/\([^/][^/]*\)/$,\1,'`; \
  compiler="/home/wdd/serenity/Toolchain/Build/gcc/./gcc/xgcc -B/home/wdd/serenity/Toolchain/Build/gcc/./gcc/ -B/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/bin/ -B/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/lib/ -isystem /home/wdd/serenity/Toolchain/Local/i686-pc-serenity/include -isystem /home/wdd/serenity/Toolchain/Local/i686-pc-serenity/sys-include   "; \
  for i in `${compiler} --print-multi-lib 2>/dev/null`; do \
    dir=`echo $i | sed -e 's/;.*$//'`; \
    if [ "${dir}" = "." ]; then \
      true; \
    else \
      if [ -d ../${dir}/${lib} ]; then \
	flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
	if (cd ../${dir}/${lib}; make "AR=/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/bin/ar" "AR_FLAGS=rc" "CC=/home/wdd/serenity/Toolchain/Build/gcc/./gcc/xgcc -B/home/wdd/serenity/Toolchain/Build/gcc/./gcc/ -B/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/bin/ -B/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/lib/ -isystem /home/wdd/serenity/Toolchain/Local/i686-pc-serenity/include -isystem /home/wdd/serenity/Toolchain/Local/i686-pc-serenity/sys-include   " "CFLAGS=-g -O2" "DESTDIR=" "EXTRA_OFILES=" "HDEFINES=" "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" "LDFLAGS=" "LOADLIBES=" "RANLIB=/home/wdd/serenity/Toolchain/Local/i686-pc-serenity/bin/ranlib" "SHELL=/bin/bash" "prefix=/home/wdd/serenity/Toolchain/Local" "exec_prefix=/home/wdd/serenity/Toolchain/Local" "libdir=/home/wdd/serenity/Toolchain/Local/lib" "libsubdir=/home/wdd/serenity/Toolchain/Local/lib/gcc/i686-pc-serenity/8.3.0" "tooldir=/home/wdd/serenity/Toolchain/Local/i686-pc-serenity" \
			CFLAGS="-g -O2 ${flags}" \
			CCASFLAGS=" ${flags}" \
			FCFLAGS=" ${flags}" \
			FFLAGS=" ${flags}" \
			ADAFLAGS=" ${flags}" \
			prefix="/home/wdd/serenity/Toolchain/Local" \
			exec_prefix="/home/wdd/serenity/Toolchain/Local" \
			GOCFLAGS="-O2 -g ${flags}" \
			CXXFLAGS="-g -O2 ${flags}" \
			LIBCFLAGS="-g -O2 ${flags}" \
			LIBCXXFLAGS="-g -O2 -fno-implicit-templates ${flags}" \
			LDFLAGS=" ${flags}" \
			MULTIFLAGS="${flags}" \
			DESTDIR="" \
			INSTALL="/usr/bin/install -c" \
			INSTALL_DATA="/usr/bin/install -c -m 644" \
			INSTALL_PROGRAM="/usr/bin/install -c" \
			INSTALL_SCRIPT="/usr/bin/install -c" \
			install); then \
	  true; \
	else \
	  exit 1; \
	fi; \
      else true; \
      fi; \
    fi; \
  done; \
fi
make[2]: Leaving directory '/home/wdd/serenity/Toolchain/Build/gcc/i686-pc-serenity/libgcc'
make[1]: Leaving directory '/home/wdd/serenity/Toolchain/Build/gcc/i686-pc-serenity/libgcc'
make[1]: Entering directory '/home/wdd/serenity/Toolchain/Build/gcc/i686-pc-serenity/libstdc++-v3'
make[1]: *** No rule to make target 'install'.  Stop.
make[1]: Leaving directory '/home/wdd/serenity/Toolchain/Build/gcc/i686-pc-serenity/libstdc++-v3'
make: *** [Makefile:10958: install-target-libstdc++-v3] Error 2
~/serenity/Toolchain/Build ~/serenity/Toolchain
~/serenity/Toolchain
wdd@webVM:~/serenity/Toolchain$ 

Sorry to bother, I hope to contribute at some point after my exams!

LibC: Rewrite scanf() family of functions

The scanf() family of functions in LibC/scanf.cpp should be rewritten, since they are borrowed from an outside source.
The current version doesn't always work correctly, so there's good reason beyond just NIH.

WindowServer: Split messages are currently racy

Both the client and server side assumes that the extra data packet is immediately available, or they will crash. If an API message has non-zero extra_size, we need to block until that data is also available.

Building Serenity on Arch Linux

Hi,

I just git cloned the latest master, entered the Toolchain directory and went:

./BuildIt.sh

The last lines of the output were:

CXX sys/socket.cpp
CXX sys/wait.cpp
CXX sys/uio.cpp
CXX poll.cpp
CXX locale.cpp
locale.cpp:11:1: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
};
^
locale.cpp:11:1: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
locale.cpp:11:1: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
CXX arpa/inet.cpp
CXX netdb.cpp
CXX sched.cpp
AS setjmp.ao
AS crti.ao
AS crtn.ao
LIB libc.a
mkdir -p ../Root/usr/include
mkdir -p ../Root/usr/lib
# Copy headers
rsync -r -a --include '*/' --include '*.h' --exclude '*' . ../Root/usr/include
# Install the library
cp libc.a ../Root/usr/lib
cp crt0.o ../Root/usr/lib/
cp: klarte ikke å hente informasjon om 'crt0.o': Ingen slik fil eller filkatalog
make: *** [Makefile:86: install] Error 1
make: Leaving directory '/home/afr/clones/serenity/LibC'

"Ingen slik fil eller filkatalog" means "No such file or directory" in Norwegian.

Using export LC_ALL=C or export LC_ALL=en_US.UTF-8 in the build script will produce error messages in English instead of the local preference.

I am unable to see, at a glance, why it can't find crt0.o.

This is with gcc 8.3.0 on 64-bit x86.

Thanks for creating an alternative operating system! I'm looking forward to trying it out one day.

Discussion: incremental build system for the applications

Here is my idea for an incrementaly build the application for serenity

Each app will have a manifest file (maybe .ini for the win9X feel 😉 )

For exemple the manifest.ini for VisualBuilder would be:

[Application]
Name="Visual Builder"
Description="A familiar GUI building tool"
Author="awesomekling"
License="2-clause BSD license."
Version="0.1.0-beta"

[Install]
Path="/opt/VisualBuilder/vb"
MakeDesktopFile=true

[Build]
OLevel=3
Defines="DEBUG"

[Dependancies]
LibC=true
LibGUI=true

Then a python script or whatever would parse the manifest and make sure all the dependencies are up-to-date and then build the application if needed.

Also we can generate desktop like file for a futur start menu or whatever

I already build something like this for my own hobby operating system project, so i can just cleanup the code, refactor bit and make a port for serenity.

What do you think?

Terminal: Scrollback history

Terminal should have a scrollback history buffer so we can see what happened when something generates lots of output.

Licence

Undecided. Probably something close to 2-clause BSD.

If you are using GPL code you can't just relicence them as BSD, see elf.h .

DNS observations/features/security ;)

Some observations for DNS ;)

  • Randomize ids in get_next_id
  • Consider using 0x20 randomization for hostnames
  • Check if question received matched the one sent.
  • Truncation support and retry through TCP (or TLS?)
  • A cache/TTL implementation?

LibC: Rewrite getopt()

We're currently using a getopt() borrowed from some BSD. It should be replaced with our own.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.