Skip to content

Instantly share code, notes, and snippets.

@lejenome
Last active February 26, 2024 04:03
Show Gist options
  • Save lejenome/77d20f418e234305ec2f9485890da2ed to your computer and use it in GitHub Desktop.
Save lejenome/77d20f418e234305ec2f9485890da2ed to your computer and use it in GitHub Desktop.
Bachelor Project (PFE) Ideas

PFE Ideas

Google Summer of Code 2017 Ideas

  • GCC
    • Export/Import IR/Data on every stage (gimple & rtl passes)
    • GIMPLE IL API simplification
    • Fuzzing every Stage
    • modular GCC
  • Eclipse
  • OpenStack
  • LibVirt:
    • Introducing job control to the storage driver
    • libvirt bindings for node.js
    • Conversion to and from OCI-formatted containers
  • CPython
  • PyPy
  • Coq Proof Assistant
  • Mozilla
    • qutebrowser-servo: servo/rust -> libservo -> libservo++ -> qtservo -> pyqtservo
    • Rust GUI tookit: Rust + Servo (HTML/CSS) == Gtk + Glade == qt/c++ + QML
    • Rust interpreter and Jupyter kernel
    • NumPy uFuncs support and A[i, :, j] syntax support

OXFORD Bachelor of Computer Science Projects

Full List:


Eurpe Union - Open Dream Kit - Porjects

  • Basic JUPYTER interface for GAP, PARI/GP, SAGE , Singular
  • T4.1: SAGE notebook / JUPYTER notebook convergence
  • Tools for collaborating on notebooks via version-control
  • Extend the existing assembly superoptimiser for AVX and upcoming Intel processor extensions for the MPIR library.
  • T4.8: JUPYTER extension for 3D visualisation
  • Explore the possibility to interface smoothly PYTHRAN , CYTHON and Cilk++
  • T5.7: Pythran, CYthon convergence
  • T5.9: HPC enabled SAGE distribution
  • T4.12: Python/Cython bindings for PARI
  • T6.5: Knowledge-based code infrastructure

Embed LLVM-based Scripting Languages support

Why

Current state:

  • Lua/Python/C# embed implementation for many apps (games, servers, ...)

Small size LLVM-based solution to support any LLVM-JIT based language implementation.

PFE

  • App APIs to LLVM-IR predefined functions and types.
  • LLVM-IR predefined functions and types to the scripting lang API.
  • Small size LLVM implementation.
  • Proof of concept: Lua/Python/C# scripting for a demo/existing app.
  • LibScript lib support?

Semantic Firefox/Chrome Bookmarks file system extension

Why

Represent Bookmarks as a file system tree where dirs are categories and tags, and files are bookmarks for easy manage huge bookmarks lists and for scripting using standard file system functions (copy, paste, link, remove, add)

PFE

  • implement userspace FUSE-base file system to represent bookmarks

  • file operations support

    • opendir / readdir (bookmarks on tag/category/site)
    • open / read (the bookmark as link)
    • getattr
    • unlink (delete bookmark)
    • rmdir (delete tag/category or all bookmarks of the site)
    • symlink (add bookmark to tag/category)
    • copy / paste / link (to duplicate the bookmark)
    • rename (rename bookmark/tag/category)
    • statfs (bookmarks number,... ?)
    • create (add bookmark link to tag/category and site)
    • readlink (bookmark link as path to site)
    • chmod / chown (bookmarks owner management ?)
  • auto tags generation (based on keywords, metadata, schema.org, ...)

  • thumbnails auto generation (img for images, html rendered image, schema.org metadata: logo, ranking, ...)

  • Firefox/Chrome extension for integration with the file system

  • nautilus integration (if needed)

  • file type and content:

    • sol1: a link .desktop file with url entry, icon, name, categories, ...
    • sol2: html file with redirect metadata

mozfs tree example:

.
|_ stats.json
|_ stats.html
|_ stats.xml
|_ tags
|  |_ tag1
|  |  |_ ooredoo home page.link -> /sites/www.ooredoo.tn/index.html
|  |_ tag2
|     |_ Tunisie Telecom Bussniess.link -> /sites/tunisietelecom.tn/bussniess/?rt=5
|_ categories
|  |_ IT
|  |  |_ ooredoo home page.link -> /sites/www.ooredoo.tn/index.html
|  |  |_ Tunisie Telecom Bussniess.link -> /sites/tunisietelecom.tn/bussniess/?rt=5
|  |_ other
|_ sites
  |_ www.ooredoo.tn
  |  |_ index.html
  |_ tunisietelecom.tn
     |_ bussniess
        |_ ?rt=5

Ada compiler

Why

GCC-based Ada implementation and compiler (Gnat) alternative using LLVM toolchain. It's very demanded as LLVM/clang is a fast-growing serious alternative to GCC. It has modern design and it is standard compatible. It is used By Apple on MacOS/iOS, By Nvidia on CUDA/GPU-firmwares, by AMD, Quantum, and many others too.

Benefit to Ada community:

  • No GPL license, No restriction commercial use
  • LLVM IR, many analyze tools and sanitizers

Benefit for LLVM community:

  • Improve LLVM reliability and generated code correctness for mission-critical.
  • Reliability and code generation correction proofs by military/gov.
  • Ada powerful data types/subtypes notation
  • SPARK Design by Conduct framework

PFE

  • lexer and parser front-end for LLVM (flex & bison or hand-written recursive parser)
  • reuse GNAT standard lib implementation
  • parsing correctness tests
  • generated binary correctness proof
  • SPARK extension implementation
  • secure Linux-unikernel generation
  • unikernel correctness and security analyze (kernel + modules + userspace + libs)
  • SPARK-like framework for LLVM to be used on other languages front-end (at IR level)

C/C++ REPL

Why

IPython like LLVM-based C/C++ interpreter for scientific and testing use. Reuse Cling interpreter used by CERN and add more features. Last update for Cling was at 2015. But since last month, It is on active dev again?

PFE

  • update cling to upstream LLVM
    • it seems it's back on dev again since last month
  • mainstream the code
  • re-use LLVM JIT instead of cling specific JIT
  • add Bash/Zsh like history completion
  • add clang_colored like live coloring and syntax highlighting
  • add YouCompleteMe like auto-completer
    • code completion for standard keys (int, long, ...) is already implemented
    • should be exteneded to user defined keys (vars, fncts, macros, typedef, ...)
  • live libs & headers path injecting
  • add man/doxygen/python-help docs access (using man-pages, glibc-docs, live doxygen-gen, stdman, sphinx, ...)
  • add gdb/lldb fallback on exceptions
  • add !<shell_command>
  • add %<internal_commands> like IPython
  • add session store, restore
  • add code export support
  • add %+ -Werror, %- -Wall: clang flags and args append/remove
  • add vim-simpledb like vim/emacs/IDEs integration to exec one/all lines
  • add vim-synastic like checker/validator
  • add ltrace/strace like tracers
  • add Makefile support to resolve dependencies for big projects using provided makefiles
  • add pkg-config integration
  • moving jupyter protocol implementation into LLVM JIT code to support all LLVM based JITs interpreters.

Overlay file system new features and use

Why

Merging multiple file systems (dirs) into single one got very big intension last view years especially for virtualisation/container use. Overlayfs is newly created implementation used by Docker and other vendors.

merge dir1 and dir2 to dir3 (dir1 upper and dir2 lower)

dir1
|_ file1
|_ file2

dir2
|_ file1
|_ file3

dir3
|_ file1  # from dir1
|_ file2  # from dir1
|_ file3  # from dir2

PFE

  • add sync changes back to lower dir support
  • implement front-end solution to merge Local Home, Google Drive, oneDrive, ....
  • add scripting support to determine which level dir to sync to (Google Drive or oneDrive,...)

Atomic Mode-setting, Nuclear Page-Flipping

Why

Linux graphic subsystem has changed a lot last years (from X11 drivers to kernel-based KMS/DRM to the recent kernel-based Atomic mode-setting) to produce more correct graphical buffers on screen. Intel is the first to implement it. AMD and Nvidia open source drivers support is still on early dev.

PFE

  • implementation for AMD Radeon (R600/RadeonSI drivers)

Unix Device Memory allocation API

Why

Nvidia has proposed to replace the use of Linux GBM with OpenGl ES for Memory Allocation. But due to limitations on both APIs, the decision was to develop a new vendor-independent allocation API (Unix Device Memory Allocation library).

PFE

  • study available APIs and contributor to the specification design
  • add an experimental proof-of-concept userspace API to be used by apps/toolkits
  • add an experimental proof-of-concept API support to the driver/Linux (AMD or Intel driver)
  • test and analyze of API specification and to the API implementation.
  • port to other Unix platform (FreeBSD) for portability proof

CoreBoot

Why

Bios and EFI alternative firmware. Open source with less legacy; moving many hardware initialisation to OS. Used on Google ChromeBooks.

PFE

  • port to new Board ?

Code should use a formal proof method on any chosen idea

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment