Introduction

The conclusion of this long and magnificent experience of Google Summer of Code, which began around five months ago, has arrived, and it is now time to recap the points of this long journey. I knew from the first day that this was going to be a fantastic experience, but I never expected to learn so much this summer!

It all started some months ago when my thesis supervisor advised that I engage in this initiative that Google has been doing for several years. My thesis supervisor put me in touch with a PhD student at the University of Trento who had previously participated in GSOC and is now a mentor. Fascinated by his experience, I set out to work to ensure that my proposal was chosen. After several weeks of effort, I submitted my project idea, and on May 20, I received an email informing me that I had been accepted for Google Summer of Code 2022; I was overjoyed!

Google Summer of Code work

The first three weeks of work, known as the Community Bonding period, have been a chance for me to study and become familiar with the tools that I would be using for the next ten weeks. This period was really beneficial to me since I was able to immerse myself into the R community while also learning a lot of new topics thanks to my blog posts: writing them helped me keep track of everything I had been studying.

In accordance with the goal of my project I’ve been working on two distinct repositories:

All of my progress on the two aforementioned repositories is documented in the pull requests and issues listed underneath. Furthermore, the week summaries that I posted at the end of each week give a more detailed explanation of the changes that I made week by week; you can find them here.

FabrizioSandri/RcppDeepState-action
Pull requests Issues
#1 First prototype #2 Segmentation fault not catched
#2 Exit codes #4 Fuzzing functions with Rcpp parameters
#3 Input arguments #7 Valgrind for initial pass
#4 Composite action #8 RcppDeepState optimization options
#6 Action's comments #10 Missing Rcpp Strings support
#7 Action's comments - 2 #13 Wrong inputs column
#8 Additional arguments and documentation #18 Valgrind and Clang-14 dwarf support
#9 Docker hub integration
#10 Report size exceeds the maximum GitHub comment size
#12 Docker Hub tags problem
#15 Report details
#17 Get errors count
#18 Parameters names/values
#20 Dependencies issue
#21 Action logs enhancement
FabrizioSandri/RcppDeepState
Pull requests Issues
#1 Makefile generation fix and improvements #5 what to do when auto comments are too large?
#3 Override default Makevars #11 Docker Hub integration trigger event
#5 Harness creation improvements #13 SHA in PR comment?
#6 Debug symbols tests #14 beta test on other packages?
#9 Logging improvements #16 parameter names / value?
#11 Rcpp string support #19 Not finding source files from DESCRIPTION LinkingTo: field?
#12 Fuzz only supported functions
#14 qs::c_qsave moved to the runner
#15 Automatically setup CI
#16 Harness creation improvements - 2
#17 Custom test harness
#19 Harness unit test name
#20 Editable functions
#21 Harness unit test name - 2
#22 Exit status codes
#23 Harness creation improvements - 3
#24 Makevars issue
#25 Dependencies problem
#26 IntegerMatrix support
#27 Dependencies issue

Future work

There’s still a lot to accomplish with RcppDeepstate, and I’m specifically talking to the fact that a future step would be the package’s release on CRAN. As the goal of my project, I spent a lot of time during the Google Summer of Code improving RcppDeepState for a future CRAN publication, but with all of the problems related to Deepstate portability on Windows-based systems, I believe that this is a future step, as demonstrated by the results obtained after uploading the package on Win-builder: most of the errors were caused by the use of a Windows system.

Another step would be to expand RcppDeepState’s datatype coverage by introducing additional datatypes, allowing RcppDeepState to run on a broader range of packages. To do this, I created a wiki article that describes how to Add a new datatype to RcppDeepState. The scope of this page has been successfully shown thanks to Dr.Martin R. Smith’s first external contribution to the RcppDeepState package. More information is available in the dedicated blog post.

Another future improvement would be to provide a new option to RcppDeepState-action that allows users to choose a different fuzzer than the default one provided by Deepstate; Libfuzzer, Manticore and Angr are three alternative fuzzers.

My Google Summer of Code experience

My Google Summer of Code experience was incredible, something I never imagined, and it was one of the best in my career. This experience taught me a lot about working with others and contributing to open source. At the end of this experience, I can certainly say that I will spend more time to open source than the time I’ve spent so far. As a maintainer, I will continue to contribute to my project.

I am grateful to all of my mentors who took the time to guide me through this journey and share their unique experience and knowledge with me. Special thanks go to:

  • my evaluating mentor Dr.Toby Dylan Hocking, who has always been available to help me during the Google Summer of Code. I was able to stay on track and keep up the good work thanks to his helpful guidance.
  • my mentor Randy Lai, who helped me with his great experience with GitHub Actions to improve the RcppDeepState action;
  • my mentor Anirban Chetia, who gave me good suggestions on the challenges I had in the early stages of utilizing RcppDeepState;
  • Dr.Martin R. Smith, for his great availability to beta test my GitHub action on his packages and for integrating a new datatype to RcppDeepState;
  • all of the R community people I’ve interacted with on GitHub, the RcppCore team;
  • Google/Google Summer of Code for organizing this fantastic event year after year.