Unsafe in Rust
Use case with sysinfo
by Guillaume Gomez
				
				
Who am I?
Rust language reviewer and contributor.
Member of:
	- rustdoc team (team leader)
 
	- docs.rs team
 
	- tools team
 
I am a Huawei engineer.
				
				
				
### What is "FFI"?
"FFI" stands for "Foreign Function Interface".
In short: declaring items from a C library in your Rust code to use them.
				
				
				
				
				
### NonNull doesn't solve all issues!
 * You can still have concurrent access to the data pointed by the pointer.
 * You still have to free the memory yourself.
 * You still need to initialize the memory you allocated to the pointer.
 * You can still have dangling pointers.
				
				
				
				
### Wrapping pointers is the key
				
				
### Unifying different low-level APIs
Traits are the key!
				
				
				
### Example with system CPU usage
 1. Get diff time
 2. Get maximum CPU time
 2. Get CPU time
				
				
### On Linux
Read and parse content from `/proc/stat`...
That's it!
				
				
### On macOS
 1. Use __sysctl__ to get number of processors
 2. Get the processors' info with __host_processor_info__
				
				
### On Windows
Very "opaque".
 1. Open connection to "query engine"
 2. Create a query (looks like "% Processor time")
 3. Translate the query
 4. Run the query
				
				
### And it was just for one information
This is why it's very important to handle it with traits to ensure each platform provides the same information the same way.
				
				
				
### Limitations
Unfortunately, not all information can be retrieved on all systems.
Components are a good example.
				
				
### Going around some limitations
Study case: getting a process environment on mac.
				
				
Thank you for listening!
More advanced explanations on 
< blog.guillaume-gomez.fr >
< guillaume1.gomez@gmail.com >
 @GuillaumeGomez
 @imperioworld_