Development/Documentation > Development

What skills are needed for Development

(1/2) > >>

mikeisfly:
My apologies in advance if this is answered some where else, I really want to start contributing to the Pfsense project other than helping with tech support in the forums and donating money. I really wanted to help with code development and I didn't find this information anywhere. What skill sets are needed if someone wanted to contribute? And are there any resources that people have that people could research so that they can contribute constructively? Here are some assumptions I'm starting off with:

1. FreeBSD
2. PHP
3. HTML
4. XML
5. C++

Any info here is much appreciated. By trade I'm a network engineer with a deep background in Cisco and Windows, but in my younger years I have done some development in qBASIC, PASCAL, Fortran, C++. I really want to get back into programming and I thought why not do that by working on a project that I love and support.

Thanks,

Klaws:
If you want to develop kernel patches, C is the language. For the frontend (the WebGUI stuff), PHP, HTML, JScript/JavaScript/ECMAScript. While pfSense uses XML to store it's configration, you don't need to handle the XML config file yourself, there are functions for you to do the dirty work.

How much FreeBSD knowledge you need depends on which area you want to tackle.

To actually contribute, you need to know how to operate Git/Github. If you have previous experience with version control systems like SVN, you'll probably feel some sort of at home there, although the vocabulary appears to be totally different. For example, the "trunk" is the "master branch". And the pfSense team prefers backports instead of reintegration.

phil.davis:
I came from a Pascal/Fortran/C/OpenVMS/DCL background and managed to learn new things :)
I think the main thing to learn is PHP. The manual here is good - http://www.php.net/manual/en/index.php - if you can already program then you are just learning the concepts of PHP and then the nitty-gritty of how to do each kind of test, loop, operation... in the new language.
As per any other development project, you don't write much from scratch. You find something that does a similar thing to what you want, read the code, understand it, cut-and-paste.
If you are just changing a few files, I find it is easy just to get them off online GitHub, edit in Notepad++ (if you have a Windows laptop/client),... as per this post: http://forum.pfsense.org/index.php/topic,47676.msg251034.html#msg251034 - you don't have to learn any command-line Git.
One day, if you (or I) grow up and develop a really big enhancement, then we can install Git on the local client and do all the fancy stuff, then submit a pull request with 50 files.
I found the easiest way to work out what is where is to traverse around the GitHub folders, 3 folders have most of the useful stuff - /usr/local/www for the code that drives the GUI, /etc for startup script things, /etc/inc for PHP include files that have sub-routines for all and sundry.

dhatz:

--- Quote from: mikeisfly on July 12, 2013, 05:43:21 am ---My apologies in advance if this is answered some where else, I really want to start contributing to the Pfsense project other than helping with tech support in the forums and donating money. I really wanted to help with code development and I didn't find this information anywhere. What skill sets are needed if someone wanted to contribute? And are there any resources that people have that people could research so that they can contribute constructively? Here are some assumptions I'm starting off with:

--- End quote ---

Well, the fastest/easiest way to get started would be by visiting the actual pfSense code repository at GitHub:
https://github.com/pfsense
which will immediately make clear to you that pfSense development is mostly done in PHP with some C and some shell scripts.

Next you should check the pfSense redmine bugs/features database:
http://redmine.pfsense.org/projects/pfsense/issues


Depending on what type of contributions you expect to make, you might need some background in pf, FreeBSD & *ix networking. There is a lot of on-line documentation about the latter two; for "pf" you can read "The Book of PF, 2nd Edition" by Peter N.M. Hansteen (2011), but keep in mind that pfSense's pf contains quite a bit of custom code (check pfsense-tools/patches/RELENG_8_3), so it's neither FreeBSD nor OpenBSD.

As mentioned by phil.davis you can check the files on your own pfSense installation, in directories
/etc/inc (most of pfSense code)
/usr/local/www (pfSense webGUI)
/var/ (/var/etc temporary config files used by pfSense daemons - e.g. ipsec, openvpn, filterdns)

Since the new pfSense 2.2 will be based on FreeBSD-10, you keep up with FreeBSD development mailing lists:
http://lists.freebsd.org/pipermail/freebsd-net/
http://lists.freebsd.org/pipermail/svn-src-all/


I think the best way to contribute would be to find a specific feature which you know best or use daily in your deployment, code an enhancement and submit a pull request.

mikeisfly:
Thanks everyone for the good information. I have some work to do. There is a lot of good info in this post, is there any way we can get it stickyed?

Navigation

[0] Message Index

[#] Next page

Go to full version