Appscope - General-Purpose Observable Application Telemetry System

Overview

Build & Test

AppScope

AppScope is an open source, runtime-agnostic instrumentation utility for any Linux command or application. It helps users explore, understand, and gain visibility with no code modification.

AppScope provides the fine-grained observability of a proxy/service mesh, without the latency of a sidecar. It emits APM-like metric and event data, in open formats, to existing log and metric tools.

It’s like strace meets tcpdump – but with consumable output for events like file access, DNS, and network activity, and StatsD-style metrics for applications. AppScope can also look inside encrypted payloads, offering WAF-like visibility without proxying traffic.

Get Started

Before you begin, make sure that your environment meets AppScope requirements.

Next, you can obtain AppScope three ways:

  • Get the container image from Docker Hub and run AppScope in it.
  • Check out the code from this project, then build and run AppScope in your Linux environment.
  • Get the binaries from the CDN, and run them in your Linux environment.

The container image at Docker Hub and binaries at the CDN are updated for each new release of this project.

Once you have downloaded and/or built AppScope, try some simple commands to verify that AppScope is available:

  • Scope a new process like scope ps -ef. Try substituting top or curl https://google.com for ps -ef. Run scope events to see the results.

  • Attach to a process that is already running. Run ps -ef and find the process ID (PID) of a command or program you would like to scope. Attach to and scope the running process with scope attach PID. Run scope dash to watch events live.

See the website docs for the full story of how to use AppScope.

Build

AppScope is not built or distributed like most traditional Linux software.

  • Insofar as possible, we want AppScope binaries to be Build Once, Run Anywhere. To approach this goal, we build with a version of glibc that is (1) recent enough that the resulting binary contains references to versions of functions in the glibc library that are still supported in the latest glibc, yet (2) old enough that the binaries can run on a wide range of Linux platforms without having to rebuild locally. .
  • We don't build OS installation packages like DEBs or RPMs. This way, when you want to investigate a running system or build a custom container image, you can simply drop AppScope in and use it.

Pull a copy of the code with:

git clone https://github.com/criblio/appscope.git
cd appscope

If you are on Ubuntu 18.04, install the build dependencies with:

./install_build_tools.sh

Then, build and test the code with:

make all test

If you are on a platform other than Ubuntu 18.04, or prefer not to install the dependencies, ensure that Docker, BuildX, and make are installed, then build in a container with:

make build

Either way, the resulting binaries will be in lib/linux/$(uname -m)/libscope.so, bin/linux/$(uname -m)/scope, and bin/linux/$(uname -m)/ldscope.

We support building x86_64 (amd64) or aarch64 (arm64/v8) binaries by adding ARCH=x86_64 or ARCH=aarch64 to the make build command. See the BUILD doc for details.

Keep Going

On the AppScope Website:

The content on that site is built from the website/ directory in this project.

Elsewhere, you can:

  • Complete the AppScope Fundamentals sandbox, a tutorial that takes about 30 minutes.
  • See our Design Docs in the docs/ directory in this repo if you're thinking about contributing to this project, or if you just want to understand the internal logic of AppScope.
  • Join the Cribl Community on Slack. The #appscope channel is where you'll find developers who contribute to this project.

Please submit any feature requests and defect reports at https://github.com/criblio/appscope.

Issues
  • tail -f breaks after implementing console events

    tail -f breaks after implementing console events

    Steps To Reproduce

    Followed article https://cribl.io/blog/bash-history-logging-the-easy-way-with-appscope/ implementing AppScope to enable logging of user commands.

    I found that when using tail -f to watch the output of a log file I would get an error to stdout within about 5 seconds and tail would exit

    tail: error waiting for inotify and output events: Interrupted system call
    

    I also found the below error in the AppScope application log output

    Scope: tail(pid:1950525): [2022-01-27 05:20:15.671] ERROR: Could not get function address of uv_fileno.
    

    Environment

    - AppScope: v0.8.1
    - OS: Red Hat Enterprise Linux 8.5 (Ootpa)
    - Architecture: x86_64
    - Kernel: 4.18.0-348.2.1.el8_5.x86_64
    

    Requested priority

    Medium

    Relevant log output

    See above
    
    bug release-note 
    opened by PrymalInstynct 25
  • Http2 Protocol Support in libscope

    Http2 Protocol Support in libscope

    Early production feedback has shown that extraction of HTTP/S metrics from connection scoped applications is very important for getting first level of observability into an application. libscope is currently able to extract HTTP metrics/events on connections where HTTP1 protocol is being used. This ticket is to extend the same metric and event extraction to HTTP2 connections.

    libscope release-note 
    opened by iapaddler 23
  • Spike: Go Signal Handling

    Spike: Go Signal Handling

    Reproduce: docker run --rm -it --entrypoint /bin/sh -u 0:0 hashicorp/terraform:1.0.3 --or on a dev instance -- docker run --rm -it --entrypoint /bin/sh -u 0:0 -v /<fullpath>/appscope/:/appscope hashicorp/terraform:1.0.3 where fullpath points to an appscope repo

    ldscope terraform help you get the error: /tmp/libscope-0.7.2/ldscopedyn could not find or execute commandhelp. Exiting.

    The terraform executable is executing ldscopedyn with the command help. Of course, help is not an executable.

    The terraform executable uses a package panicwrap (https://github.com/mitchellh/panicwrap) which re-executes a Go binary and monitors stderr output from the binary for a panic.

    The panicwrap package defines a command to be executed. This instantiates a Command struct. The path used in the Command struct is sourced from the Go function os.executablePath. The function os.executablePath calls syscall.Readlink with the path /proc/self/exe. When a static app is started with ldscope the link in /proc/self/exe points to ldscopedyn. As a result, ldscopedyn is started with the argument argv[1], the original argv[2], which in this case is help. Boom.

    At this point, without testing, we think the approach to resolve this is an interposition of syscall.Readlink. If /proc/self/exe is used as path and the result contains the substring ldscope then we will return argv[1], the original intended executable. In this case terraform.

    bug libscope 
    opened by iapaddler 14
  • Missing Console Events using TLS

    Missing Console Events using TLS

    @coccyx reported an issue with a test he was trying:

    scope watch -i 15s -c tls://in.logstream.relaxed-newton.cribl.cloud:10090 -- sh -c 'mtr --report -c 5 -i 1 --json --no-dns 8.8.8.8 | jq -cM -r .'
    

    and wasn't getting console events in LogStream. Simplified to remove the shell and jq and still nothing.

    scope watch -i 15s -c tls://in.logstream.relaxed-newton.cribl.cloud:10090 -- mtr --report -c 5 -i 1 --json --no-dns 8.8.8.8
    

    Switched from TLS to TCP and is now getting console events. Same when adding the sh and jq pieces back.

    Not sure if the issue is on AppScope or LogStream.

    libscope release-note 
    opened by pdugas 13
  • Add `scope service` command

    Add `scope service` command

    scope service cribl -c tls://in.instance.whatever:10090 should:

    • create the /etc/scope/cribl/ directory
    • create /etc/scope/cribl/scope.yml with sane defaults and the backend settings
    • create /etc/scope/cribl/scope_protocol.yml with defaults
    • extract libscope.so to (where?)
    • edit the cribl boot-start-installed /etc/systemd/system/cribl.service file to add:
      • Environment=LD_PRELOAD=/.../libscope.so
      • Environment=SCOPE_HOME=/etc/scope/cribl/
    cli 
    opened by pdugas 12
  • Application Specific Metrics

    Application Specific Metrics

    SaaS has requested the ability to capture metrics and deliver to LogStream. The metrics lib they are starting with: https://github.com/brightcove/hot-shots

    libscope 
    opened by iapaddler 11
  • scoped process stuck at 100% CPU

    scoped process stuck at 100% CPU

    When running npm ci the process gets stuck at 100% CPU utilization - stack traces below. Affected version: 0.7.1

    (gdb) thread apply all bt 
    
    Thread 3 (Thread 0x7f21181a4700 (LWP 4261)):
    #0  0x00007f2116ad26e6 in futex_abstimed_wait_cancelable (private=0, abstime=0x0, 
        expected=0, 
        futex_word=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
    #1  do_futex_wait (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>, abstime=0x0) at sem_waitcommon.c:111
    #2  0x00007f2116ad27d8 in __new_sem_wait_slow (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>, abstime=0x0) at sem_waitcommon.c:181
    #3  0x00007f2116ad2849 in __new_sem_wait (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>) at sem_wait.c:42
    #4  0x0000000001388242 in uv__sem_wait (sem=<optimized out>)
        at ../deps/uv/src/unix/thread.c:626
    #5  uv_sem_wait (
        sem=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>)
        at ../deps/uv/src/unix/thread.c:682
    #6  0x0000000000af9d05 in node::inspector::(anonymous namespace)::StartIoThreadMain(void*)
        ()
    #7  0x00007f2116ac96db in start_thread (arg=0x7f21181a4700) at pthread_create.c:463
    #8  0x00007f21167f2a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    
    Thread 2 (Thread 0x7f2114ed1700 (LWP 4256)):
    #0  __pthread_rwlock_wrlock_full (abstime=0x0, rwlock=0x7f210800e830)
        at pthread_rwlock_common.c:794
    #1  __GI___pthread_rwlock_wrlock (rwlock=0x7f210800e830) at pthread_rwlock_wrlock.c:27
    #2  0x00007f2117a329b9 in CRYPTO_THREAD_write_lock () from /tmp/libscope-0.7.1/libscope.so
    #3  0x00007f21179faf2d in ENGINE_pkey_asn1_find_str ()
       from /tmp/libscope-0.7.1/libscope.so
    #4  0x00007f21179b460a in EVP_PKEY_asn1_find_str () from /tmp/libscope-0.7.1/libscope.so
    #5  0x00007f2117a14690 in find_ameth () from /tmp/libscope-0.7.1/libscope.so
    #6  0x00007f2117a25c7e in ossl_namemap_doall_names () from /tmp/libscope-0.7.1/libscope.so
    #7  0x00007f2117a15f6f in EVP_PKEY_set_type_by_keymgmt ()
       from /tmp/libscope-0.7.1/libscope.so
    #8  0x00007f2117a0f896 in evp_keymgmt_util_assign_pkey ()
       from /tmp/libscope-0.7.1/libscope.so
    #9  0x00007f2117a0fde1 in evp_keymgmt_util_gen () from /tmp/libscope-0.7.1/libscope.so
    #10 0x00007f2117a1a987 in EVP_PKEY_gen () from /tmp/libscope-0.7.1/libscope.so
    #11 0x00007f211795f595 in ssl_generate_pkey_group () from /tmp/libscope-0.7.1/libscope.so
    #12 0x00007f2117989248 in tls_construct_ctos_key_share ()
       from /tmp/libscope-0.7.1/libscope.so
    ---Type <return> to continue, or q <return> to quit--- 
    #13 0x00007f21179870a3 in tls_construct_extensions () from /tmp/libscope-0.7.1/libscope.so
    #14 0x00007f21179927ec in tls_construct_client_hello ()
       from /tmp/libscope-0.7.1/libscope.so
    #15 0x00007f211799151f in state_machine () from /tmp/libscope-0.7.1/libscope.so
    #16 0x00007f211796a9d4 in SSL_do_handshake () from /tmp/libscope-0.7.1/libscope.so
    #17 0x00007f21178d31e9 in establishTlsSession (trans=0x4f8aba0) at src/transport.c:418
    #18 0x00007f21178d3d5b in checkPendingSocketStatus (trans=0x4f8aba0)
        at src/transport.c:719
    #19 0x00007f21178d485e in transportConnect (trans=0x4f8aba0) at src/transport.c:986
    #20 0x00007f21178d9f21 in ctlConnect (ctl=0x4f8c400, who=CFG_CTL) at src/ctl.c:1084
    #21 0x00007f21178bf71b in doEvent () at src/report.c:2428
    #22 0x00007f2117899694 in periodic (arg=0x0) at src/wrap.c:980
    #23 0x00007f2116ac96db in start_thread (arg=0x7f2114ed1700) at pthread_create.c:463
    #24 0x00007f21167f2a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    
    Thread 1 (Thread 0x7f2118192d40 (LWP 4254)):
    #0  0x00007f2116ad3c70 in __GI___nanosleep (requested_time=0x7ffd01f5ed60, 
        remaining=0x7ffd01f5ed60) at ../sysdeps/unix/sysv/linux/nanosleep.c:28
    #1  0x00007f21178e2703 in sigSafeNanosleep (req=0x7ffd01f5ed90) at src/utils.c:186
    #2  0x00007f211789947b in handleExit () at src/wrap.c:918
    #3  0x00007f21178d2d65 in handle_tls_destroy () at src/transport.c:332
    #4  0x00007f2117a27e62 in OPENSSL_cleanup () from /tmp/libscope-0.7.1/libscope.so
    #5  0x00007f21167146c5 in __cxa_finalize (d=0x7f2117f6b4e0) at cxa_finalize.c:83
    #6  0x00007f2117898073 in __do_global_dtors_aux () from /tmp/libscope-0.7.1/libscope.so
    #7  0x00007ffd01f5ef00 in ?? ()
    #8  0x00007f2117f91bc3 in _dl_fini () at dl-fini.c:138
    
    release-note known-issue 
    opened by ledbit 11
  • Add a default search path for Edge

    Add a default search path for Edge

    In order to support Edge in a container and enabling processes from outside the container to connect, we want to add an additional path for the Edge socket. At this point we are thinking: /var/run/appscope/appscope.sock

    There could be additional paths to add as we proceed with tests. We should stat files to ensure they exist before trying to connect. The list and order of files that we currently understand are:

    • /var/run/appscope/appscope.sock
    • $CRIBL_HOME/state/appscope.sock
    • /opt/cribl/state/appscope.sock
    libscope 
    opened by iapaddler 10
  • Java9 ldscope Http fails

    Java9 ldscope Http fails

    Reproduction steps:

    • Start container with Java 9
    make java9-shell
    
    • Create simple Http server
    mkdir -p /opt/java_http
    touch /opt/java_http/SimpleHttpServer.java
    
    • SimpleHttpServer.java:
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
    
    public class SimpleHttpServer {
      static class StatusHandler implements HttpHandler {
        public void handle(HttpExchange exchange) throws IOException {
          exchange.getResponseHeaders().set("Custom-Header-1", "A~HA");
          exchange.sendResponseHeaders(200, "OK\n".length());
          OutputStream os = exchange.getResponseBody();
          os.write("OK\n".getBytes());
          os.flush();
          os.close();
          exchange.close();
        }
      }
    
      public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 1024);
    
        server.createContext("/status", new StatusHandler());
    
        server.start();
      }
    }
    
    • Compile Java file:
    javac -d /opt/java_http/ /opt/java_http/SimpleHttpServer.java
    
    • Start scope:
    cd /opt/java_http
    ldscope java SimpleHttpServer 2> /dev/null &
    sleep 1
    curl http://localhost:8000/status
    ## curl: (52) Empty reply from server
    

    For different versions of the Java scenario above works fine (curl succeeded)

    bug libscope 
    opened by michalbiesek 10
  • Protocol Detection with Java TLS/SSL

    Protocol Detection with Java TLS/SSL

    While running integration tests for the work on #543, I found all of our Java tests were failing. HTTP/1 events were broken by the changes on that branch. It turns out to be a result of the way the new HTTP parsing relies on HTTP protocol detection. Protocol detection isn't working for Java TLS so HTTP parsing isn't even running.

    documentation libscope 
    opened by pdugas 10
  • double free or corruption (!prev)

    double free or corruption (!prev)

    Running into an issue with scoped application node crashing during what seems to be like exit handling

    (gdb) thread apply all bt
    
    Thread 3 (Thread 0x7f8cfe193700 (LWP 5070)):
    #0  0x00007f8cfcac16e6 in futex_abstimed_wait_cancelable (private=0, abstime=0x0, expected=0, 
        futex_word=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>)
        at ../sysdeps/unix/sysv/linux/futex-internal.h:205
    #1  do_futex_wait (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>, abstime=0x0) at sem_waitcommon.c:111
    #2  0x00007f8cfcac17d8 in __new_sem_wait_slow (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>, abstime=0x0) at sem_waitcommon.c:181
    #3  0x00007f8cfcac1849 in __new_sem_wait (
        [email protected]=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>) at sem_wait.c:42
    #4  0x0000000001388242 in uv__sem_wait (sem=<optimized out>)
        at ../deps/uv/src/unix/thread.c:626
    #5  uv_sem_wait (
        sem=0x445a600 <node::inspector::(anonymous namespace)::start_io_thread_semaphore>)
        at ../deps/uv/src/unix/thread.c:682
    #6  0x0000000000af9d05 in node::inspector::(anonymous namespace)::StartIoThreadMain(void*) ()
    #7  0x00007f8cfcab86db in start_thread (arg=0x7f8cfe193700) at pthread_create.c:463
    #8  0x00007f8cfc7e1a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    
    Thread 2 (Thread 0x7f8cfa6bf700 (LWP 5066)):
    #0  0x00007f8cfc7d4cf9 in __GI___poll (fds=0x7f8cfa6bedd0, nfds=1, timeout=1)
        at ../sysdeps/unix/sysv/linux/poll.c:29
    #1  0x00007f8cfd887410 in remoteConfig () at src/wrap.c:415
    #2  0x00007f8cfd8886b9 in periodic (arg=0x0) at src/wrap.c:985
    #3  0x00007f8cfcab86db in start_thread (arg=0x7f8cfa6bf700) at pthread_create.c:463
    #4  0x00007f8cfc7e1a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    
    Thread 1 (Thread 0x7f8cfe181d40 (LWP 5063)):
    #0  __GI_raise ([email protected]=6) at ../sysdeps/unix/sysv/linux/raise.c:51
    #1  0x00007f8cfc7008b1 in __GI_abort () at abort.c:79
    #2  0x00007f8cfc749907 in __libc_message ([email protected]=do_abort, 
        [email protected]=0x7f8cfc876dfa "%s\n") at ../sysdeps/posix/libc_fatal.c:181
    #3  0x00007f8cfc75097a in malloc_printerr (
        [email protected]=0x7f8cfc878af0 "double free or corruption (!prev)") at malloc.c:5350
    #4  0x00007f8cfc757ef4 in _int_free (have_lock=0, p=0x59f66c0, av=0x7f8cfcaabc40 <main_arena>)
        at malloc.c:4281
    #5  __GI___libc_free (mem=0x59f66d0) at malloc.c:3124
    #6  0x00007f8cfd9e9393 in engine_cleanup_int () from /tmp/libscope-0.7.1/libscope.so
    #7  0x00007f8cfda16ec8 in OPENSSL_cleanup () from /tmp/libscope-0.7.1/libscope.so
    #8  0x00007f8cfc7036c5 in __cxa_finalize (d=0x7f8cfdf5a4e0) at cxa_finalize.c:83
    ---Type <return> to continue, or q <return> to quit---
    #9  0x00007f8cfd887073 in __do_global_dtors_aux () from /tmp/libscope-0.7.1/libscope.so
    #10 0x00007fff24d0ee30 in ?? ()
    #11 0x00007f8cfdf80bc3 in _dl_fini () at dl-fini.c:138
    Backtrace stopped: frame did not save the PC
    

    I've been able to repro it with these steps:

    1. Install NodeJS 14.15.1
    2. mkdir -p /tmp/foobar && cd /tmp/foobar
    3. npm init -y
    4. edit package.json to be
    {
      "name": "foobar",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "exit 0"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    
    1. run the following command a few of times to trigger the crash
    ./scope71 run -c tcp://localhost:10090 -- npm run test
    
    release-note known-issue 
    opened by ledbit 10
  • Attach issue with service process and PrivateTmp setting

    Attach issue with service process and PrivateTmp setting

    I have encountered the issue when the service is configured with:

    PrivateTmp=true
    

    This setting allows to sets up a new file systemnamespace for the executed processes and mounts a private /tmp directory inside it, that is not shared by processes outside of the namespace.

    We can easily encounter the issue with it when our library is presented in the /tmp e.g. in /tmp/libscope-web/libscope.so

    flowchart LR
      libscope.so-->/tmp
      subgraph Host 
        /tmp
        subgraph service
            `/tmp`
        end
      end
    

    In inject function we are passing the library path in FIRST_ARG_REG. Since the process operates on a private /tmp directory it will not find our library so the dlopen -> inject -> attach will fail.

    error: dlopen() failed, library could not be injected
    

    See example configuration for memcache service: memcached.service

    opened by michalbiesek 0
  • Content: Investigate security use cases

    Content: Investigate security use cases

    Pick an exploit, and see what AppScope can do to report security events that could help someone determine that they've been infected.

    Ebury seems like an interesting choice because of its sophistication... https://malpedia.caad.fkie.fraunhofer.de/details/elf.ebury

    Mitre Att&ck seems like a really great way of looking at exploits from a perspective where AppScope appears to have the potential to make a real difference... https://attack.mitre.org/

    opened by jrcheli 0
  • [WIP] (#1038) Add `scope filter` command

    [WIP] (#1038) Add `scope filter` command

    TODO:

    • [ ] Add custom file handling in case of attach and service
    • [ ] Add integration test to verify that changes are applied, check different users than the root
    • [ ] Add default behavior when the file is not passed:
    • Do not configure the service
    • Configure all the processes
    • [ ] Handling the error/status to the Edge
    • [x] Stdin support

    Question:

    • In case of setting custom yml configuration should service be still using the following path /etc/scope/<service_name>/scope.yml or point to a new yml file location

    overwrite the file

    Next steps:

    Interactive process: docker exec -it local/remote login/command run Ensure that our library is loaded

    Future Improvements

    • Handle communication layer from fs namespace after scope attach from host perspective?
    • Identify User in Namespace/ Container ID in command like scope ps
    Found multiple processes matching that name...
    ID	PID    	USER    	SCOPED	COMMAND
    1 	846727 	-       	true  	memcached
    2 	877968 	-       	true  	/usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
    3 	1198535	memcache	false 	/usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
    
    opened by michalbiesek 5
  • Uninstall scope from service configuration after using `scope service`

    Uninstall scope from service configuration after using `scope service`

    We should consider adding the ability to uninstall scope from a service after configuring it with scope service.

    Initial ideas include:

    • Removing the LD_PRELOAD environment variable only, leaving behind other artifacts such as logs.
    • Removing all scope-related artifacts from a service.
    cli 
    opened by seanvaleo 0
Releases(v1.1.1)
Owner
Cribl
GitHub home of the LogStream, the first streams processing tool for logs
Cribl
An open-source general-purpose programming language

An open source general purpose high-level programming language! [OO-N-YUH] This language is gonna onya other languages Vs Code Extention Language Supp

Tech Penguin 4 Aug 9, 2021
🎩 An interpreted general-purpose scripting language 🔨

Dunamis Version 0.0.0.2 - Alpha Version 1.1 An interpreted general-purpose programming language Contents Syntax Functions Variables Objects Enums Incl

Tech Penguin 4 Dec 21, 2021
The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-source and can be used with OpenOCD as a general-purpose programmer

pico-probe-programmer The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-sou

martijn 21 Jul 20, 2022
An FPGA accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM).

Sextans Sextans is an accelerator for general-purpose Sparse-Matrix Dense-Matrix Multiplication (SpMM). One exciting feature is that we only need to p

linghao.song 23 Jul 22, 2022
Yet another abstraction layer - a general purpose C++ library.

Yet Another Abstraction Layer What yaal is a cross platform, general purpose C++ library. This library provides unified, high level, C++ interfaces an

Marcin Konarski 14 Jul 27, 2022
General purpose power controller, capable of driving soldering irons using different voltages and probe types.

All-purpose Power Micro Controller This general purpose power micro controller features: Wheatstone Bridge front-end New Texas Instruments INA823 inst

Tomasz Jastrzębski 26 Jun 27, 2022
A transaction processor for a hypothetical, general-purpose, central bank digital currency

Introduction OpenCBDC is a technical research project focused on answering open questions surrounding central bank digital currencies (CBDCs). This re

The MIT Digital Currency Initiative @ Media Lab 733 Jul 29, 2022
Audacity fork without Telemetry and with new features

Audacity fork without Telemetry and with new features

Sartox Free Software 663 Jul 30, 2022
Turn 2 esp32 boards into pixhawk telemetry for use with Ardupilot/Ardurover Mission Planner.

RoverLink Turn 2 esp32 boards into pixhawk telemetry for use with Ardupilot/Ardurover Mission Planner I used to use these cheap Chinese 900mhz Pixhawk

Jeffrey Berezin 2 Jan 18, 2022
Tiny blocker of Windows tracking and telemetry written in plain C++/Win32 API.

Tiny blocker of Windows tracking and telemetry written in plain C++/Win32 API. Just run once as admin and forget. No questions asked. No harmful actions performed like other Windows spying blockers try.

null 5 Mar 30, 2022
2.4 GHz LORA based telemetry and radio link for remote controlled vehicles

mLRS This is the mLRS project. The goal is an open source 2.4 GHz LORA-based high-performance long-range radio link, which provides fully transparent

null 44 Aug 8, 2022
a minimal C++, SDL2, OpenGL abstraction for general game and application development

hept the hept abstraction is a minimal lightweight layer above C++ and SDL dependencies: - SDL2 - C++17 or above - GLM example use: #include "hept.h"

ENDESGA 12 Jul 9, 2022
Example-application - Example out-of-tree application that is also a module

Zephyr Example Application This repository contains a Zephyr example application. The main purpose of this repository is to serve as a reference on ho

Zephyr Project 67 Jul 19, 2022
The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for Vulkan application developers to leverage Vulkan Profiles while developing a Vulkan application

Copyright © 2021-2022 LunarG, Inc. Vulkan Profiles Tools (BETA) The Vulkan Profiles Tools are a collection of tools delivered with the Vulkan SDK for

The Khronos Group 56 Jul 31, 2022
The purpose of these streams is to be educational and entertaining for viewers to learn about systems architecture, reverse engineering, software security, etc., and NOT to encourage nor endorse malicious game hacking.

Memestream This repository holds the code that I develop during my live game "modding" ?? sessions. When I stream, I like to speedrun making a success

Stephen Tong 28 Jul 6, 2022
A Flutter Web Plugin to display Text Widget as Html for SEO purpose

SEO Renderer A flutter plugin (under development) to render text widgets as html elements for SEO purpose. Created specifically for issue https://gith

Sahdeep Singh 96 Jul 18, 2022
A simple CHIP-8 emulator made for the purpose of studying computer organization, mainly how emulation does work.

CHIP8EMU A simple CHIP-8 emulator made for the purpose of studying computer organization, mainly how emulation does work. It was written in just a few

Patrick Cardoso 1 Nov 9, 2021
The purpose of this project is to create a modern C++17 header-only interface to the FreeRTOS kernel API

FreeRTOS-Cpp The purpose of this project is to create a modern C++17 header-only interface to the FreeRTOS kernel API. Goals of this project include:

Jon Enz 16 Jul 16, 2022
The purpose of this library is to control a piezo crystal and make sound with it

Beeper-Library The purpose of this library is to control a piezo crystal and make sound with it. The piezo may either have electronic or be connected

Dirk Ohme 2 Jan 20, 2022