Good artists copy; Great artists steal
- Pablo Picasso
Pablo Picasso is often credited for saying the above quote. I'm not going to provide my own interpretation of this quote, as there are loads of interpretations available online for those interested. However, I've often wondered how this quote could apply to programming and to Open Source development.
The Internet is full of resources to teach you almost anything programming related. Myself and many of my classmates have learned practically all of their programming knowledge from textbooks, online resources/documentation, and YouTube tutorials. These resources have taught us the programming knowledge we have and apply today, but is all of that knowledge stolen? Are you stealing code if you're learned to write your first
Hello World program from a YouTube tutorial thousands of others have watched? What are the chances the video uploader also learned to write a
Hello World program using external resources? Is the uploader's knowledge stolen?
I can't say whether this knowledge is stolen, but I believe this kind of knowledge is necessary for us to build on and expand our skills. No one person can know every perfect implementation or program every line of code for every project.
Open Source software does not exist to be ignored, Open Source software is meant to be used! If an Open Source project provides the functionalities you need, why implement the functionalities yourself when others have painstakingly done it for you? As long as the library is actively maintained and does what you need it to, you should use and study the Open Source library. Should you find any bugs, issues, or missing features, try and create your own solution and contribute to the project to make it better for everyone! Similarly, if an Open Source library provides functionality you need but you cannot integrate the library, implement the feature in your own project using the Open Source project as an inspiration.
In my previous blog post on Code Reading, I read the codebase of Docusaurus to research how the project implements Syntax Highlighting for fenced code blocks. My research taught me that Docusaurus actually uses Prism-React-Renderer, a third-party library, to provide Syntax Highlighting. This knowledge was useful because I wanted to add syntax highlighting to ctil, my Markdown-to-HTML converter, but didn't want to implement the feature from scratch. Although I can't use Prism React Renderer in my own project, researching Docusaurus gave me the idea to find a Open Source library I could use.
My search for a third-party syntax highlighter brought me to highlight.js. ctil converts text (
.txt) and Markdown (
.md) to generated HTML (
.html) files, so I want the generated HTML files to support syntax highlighting. highlight.js can be used as HTML Tags by using a Content Delivery Network, CDN, so I was able to add highlight.js by adding the following lines to the generated HTML files:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
and with these lines, I was able to add syntax highlighting:
In my previous blog post, I described how Docusaurus used Prism React Renderer to add syntax highlighting. Like Docusaurus, I used a third-party library, highlight.js, to add syntax highlighting. However, in Docusaurus configuration files were added and modified to setup Prism React Renderer, and syntax highlighting was added by using the
<Highlight /> component. Prism React Renderer also provides highlighting themes that users can configure in their projects. For my project just added highlight.js to my generated HTML files as HTML tags to be delivered through CDN. For now I'm content with basic syntax highlighting, so I'm not concerned about having a specific highlighting theme. One disadvantage of using highlight.js via CDN is that the syntax highlighting likely won't work if the user is online. In the future I may add highlight.js to the project itself so syntax highlighting will work offline.
This feature is still in development. In the current iteration, html is used as the default language class for the
<code>...</code> block. This is acceptable for now, but this solution will ignore any language class settings in the original Markdown file(s). I want ctil to parse language tags from the Markdown files to determine which language to use for highlighting. That will be an issue to fix in the future. The issue is available here for those interested.
As long as copying is allowed under the project's license and you follow the requirements of the project's license you aren't stealing. Similarly, I would argue looking to open source projects for inspiration is not stealing.