– IRC News

All about Internet Relay Chat

Interview with the author of EPIC5

After being 5 years and 11 days in the making, there was the first production release of the ircII fork EPIC5, now being at version 1.0, in the end of December.

For readers that don’t know the project yet, the website explains a little of EPIC’s history:

EPIC is an irc client project. The EPIC software was forked from ircII-2.8.2 in fall 1994. There have been 5 generations of EPIC, of which the newest two (EPIC4 and EPIC5) are still supported and in development.

5 years and 11 days – What caused that kind of delay?

I became curious and messaged the author of EPIC, who goes by by the nick hop on IRC, and we agreed on an interview – read on below…

Please introduce yourself to our readers so they get an idea who you are. How did you get into programming in the first place?

I’m over 30 years old and I live in the USA.

I had never really programmed as a kid.  I had a commodore 64, but basic was pretty unsatisfying and assembly language hurt my brain too much.  When I went to university as a wannabe engineer, I learned about higher level languages like FORTRAN and really took to them instantly.  There was just something effortless I found about coding that I had not realized was there.

I had gotten addicted to irc in my freshman year in university, and by the middle of my sophomore year, I realized that I could start fixing all of the things about ircII that annoyed me.  So I taught myself C and dove in.  For the most part, epic is just a client that I maintain for my own benefit, and I am happy to share it with everybody else who is interested in it.  Even if there were not one other epic user in the entire world, I would still maintain it, if for no other reason than I’ll always need an irc client.  But there will always be epic users, and I hope to have the opportunity to build friendships with all who are willing someday. =)

Is EPIC actually a real acronym or “just” a backronym?

EPIC is a deliberate and malicious backronym. At the time, it was common for groups to come up with an acronym and then make up some retarded way to spell it out. For example, STAR might stand for “standing tall against racism” which is a fine and noble thing to do – but you know that they came up with “STAR” before they came up with what “STAR” should stand for.

So to make fun of groups like that, i had said we should do the same thing, so we came up with EPIC and then we threw out ideas for the most retarded over the top “meaning” for it. Alas, in the end, because of our lack of imagination, we came up with something retarded, but not retarded *enough* to be seen as satire.

Was there a specific reason to fork ircII back in 1994 and if so, which?

Back in 1994, there was really only one client being used, ircII, and they had a definite notion of controlling the users by limiting what the client could do. Some of us had gone off and formed the undernet and we were looking to expand the potential of irc, rather than keeping the status quo, so there was a slight culture clash when the maintainer of ircII (who is a perfectly upstanding gentleman, I must say here) reviewed my changes and found them generally unsuitable.  So for those of us who felt that we had new ideas, it fell to us to develop (and run) our own servers and clients.  And that’s pretty much what we ended up doing.

How many core developers are working on EPIC5 and how do you coordinate development?

It depends on what “core” means.  EPIC is two things — a core software client and a script pack that completes your experience.  As far as the core software goes, that’s pretty much a one-man-show, as everyone seems content to let me do what I do.  Sometimes people will help me for short periods of time on small projects, but it’s pretty much left to me to push things along.

There is more activity in the script world.  I try not to be a “Microsoft” where I want to dominate both the operating system and the applications. I deliberately stay out of the script world and am content to just work on the core software and make other people’s lives easier.

The development of the core software product is done through CVS and there are four people who have write access.  Development of script packs is handled by the users themselves, although I provide CVS access to those who need it.

As can be read in your EPIC5 1.0 announcement, it has been over 5 years in the making – what caused such a long delay before the code was labeled “production” quality?

I never really know what it means for something to be “production”, so I often butt heads with people who think that I am too deliberate about saying something is ready for production.  Those people are probably correct.  I don’t think about versions so much as package maintainer do, but I would say that
any release of epic is “production quality”, even the alpha releases, but the main issue is how people perceive version numbers.

EPIC5-1.0 was released because the authors of amnesiac (the biggest epic5 script) said that adoption of epic5 (and their script) was being held back by people who were afraid of anything that wasn’t called a “production release”, so it was decided just to wrap up all the loose ends and put something out and
call it “production”, for whatever that is supposed to mean.

How many lines of code have been written for EPIC5 and how much of the presumably old ircII codebase is still in it?

Using a very rough estimate, about 25,000 lines of old code in EPIC4 were replaced with 32,000 lines of new code in EPIC5.  The forked version of
ircII was 2.8.2, which had 44,000 lines of code.  Of that, 40,000 lines of old code have been removed and replaced with 89,000 lines of new code. Nevertheless, the lines of code that were retained are some of the most critical parts, so no matter how much old code is replaced with new code, epic will still always be an ircII client.

How much time do you spend and have spent on developing your client?

It is impossible to guess, but probably a rough ballpark figure of “at least 10,000 hours” would be about right.

What sets EPIC5 apart from other clients?

I do not like to compare EPIC to other clients, because EPIC is not a competitive project, so I will dodge the question by answering what is different from EPIC5 than EPIC4. ;-)

One of the major forces behind EPIC5 is making things simpler.  I’ve always been averse to breaking backwards compatability without a really good reason, but at some point you have to just say that something is not done the way you want it to be done and go in a new direction.

In EPIC5, many features which have been around since the very beginning of ircII were removed, and some were scripted and provided as a /load you can use for backwards compatability, and some things went away.  But these things we removed were things that made the client slow, or complicated.

One example which everyone runs into immediately:  In ircII (up through epic4) it’s always been permissible to create alias shorthands:

alias m msg

which behaves exactly the same as if you did:

alias m {msg $*}

and the client has to actually handle this internally, at runtime, with an observable performance penalty.  Plus, let’s say you don’t want the $* to auto-append:

alias e echo This is a test

and then you do:

/e booya booya

It will do:

This is a test booya booya

Then you’re left wondering, “why did it output booya booya?”  Because you don’t think about how auto-append-of-$* is always there, ready to pounce, even when you don’t want it.

So in EPIC5, auto-append-of-$* has been removed, and if you want $* to be included in your alias, you need to put it there.  This is fully backwards
compatable because

alias m {msg $*}

works in all ircII clients, going back as far as you want.

By not having the auto-append-of-$* feature to support at runtime, the internal code of epic5 is much simpler and that allowed me to optimize an observable speedup in the overhead of running an alias.

This is just one example.  Put altogether, epic5 is faster and less complicated than epic4, and that makes it much easier for me to avoid writing buggy code that leads to crashes.

Since there are other ircII forks like BitchX and ScrollZ in active use what sets EPIC5 apart from those?

IRC is a communication medium which has really clicked with IN personality types (MBTI personality sorting).  IRC won’t ever really be mainstream since
IN personality types are rare in the public, and most people who use irc will say they “don’t get it” and they move on to yahoo or aim or whatever.

Each irc user has a unique experience, and it is that experience that keeps them coming back.  Some people just want to talk to others, some people want to wage war on a massive scale, and others want to tinker around and learn stuff.  EPIC offers a “some assembly required” experience, presenting you with a giant toolbox of toys to play with and inviting you to sit down and learn about them and see what neat things you can do with them.  And it’s great fun that there are people to talk to while you’re tinkering.

For those who need an out of the box solution, epic isn’t really appropriate so they tend to gravitate towards the other clients that give them the experience that they need to make them happy.

Have there been any specific criteria that made you keep the ircII scripting language and not change it to something more “popular” like PERL, Python, TCL?

The ircII language is tightly bound up with every facet of the ircII experience.  When you start up an ircII client, you’re presented with an input line, but what you don’t understand at first is that it is an ircII command line.  When you start writing your first script, you realize that you just put in stuff that you normally type at the command line.  Then you realize that everything you might put in your script you can type at the command line.  There is a harmony and congruence to the experience.  Your script(s) and the input line are part of one large indivisible whole.

Other clients that are based on other scripting languages often have a duality about them because you don’t interact with them at the command line in the scripting language.  They have one personality when you type at the command line and another personality when you write a script.  Depending on the type of person you are, this is either great, or it’s off-putting. Each person gravitates towards the client that provides them the experience that they are looking for.

EPIC supports other programming languages by “shelling out” to them using ircII commands.  You can run ruby code doing something like:

/ruby {
<insert ruby code here>

and since /ruby is an ircII command, and all it does is runs the inside of the {} in a ruby interpreter, you can use it anywhere.  You can even use it to run ruby stuff at the command line!

How can the community around EPIC5 get involved and what kind of support are you looking for?

EPIC is like every project and needs three things all of the time:

1) Those who are willing to write scripts or script packs
2) Those who are willing to do work on the core client
3) Those who are willing to write documentation

but participation has never been mandatory to be part of the “community”,  because we’re all just friends and it’s enough just to be friendly and chat with us.  IRC is about socialization, and sometimes, that’s enough.

Will there ever be versions of EPIC5 for other operating systems such as Windows or MacOS or is that completely out of scope?

EPIC5 should compile right out of the box for cygwin (windows) and MacOS X. But what it won’t ever be is a graphical program, which is probably what you
were really asking.  You will still have to run epic in a command shell or terminal emulator, no matter what the operating system.  There are very fine graphical clients out there, and ircII isn’t trying to offer that experience.

How secure is your code? At least BitchX had (and according to Wikipedia still has) security vulnerabilities that can at least lead to a crash?

Everybody measures ‘security’ differently.  Back when I started, I wrote crap code because I didn’t know what I was doing.  But now I’ve learned what does work and doesn’t work, and it’s hard to write insecure code when you know what makes code insecure and you don’t write it that way.  I run epic under
valgrind and bounds checking gcc and use all the warning flags I can find, and I avoid all use of “unsafe” functions.  These are just patterns of success, not guarantees of invincibility.

Do you or have you used any other clients besides EPIC and if yes, why?

Since EPIC is exactly what I want in my irc experience, I don’t usually try to run other clients, because that would just remind me of how they are only
approximating what it is I already have.  I actually prefer to talk to people who use other clients, and ask them what they like about that client and what they don’t like about epic, and then go about making those changes.

Looking back at your developmental progress, are there any decisions you would take back if you could?

Well, looking strictly from hindsight, there are always decisions you make that limit your options in the future. But it is only by stepping out of my boundaries and trying to do new things in new ways that I learned how to write good code.  So mistakes are to be expected, and rather than a source of shame and frustration, they’re opportunities for personal growth.  So no, I wouldn’t want to change anything, all my mistakes have been fortuitous.

Or something that you would have perused more?

If there is anything that I have never been accused of being, it is being too hasty to make decisions. ;-)

If you could change something in the IRC protocol itself, what would that be?

I actually have always been very happy with the simplicity and elegance of the irc protocol, and I’ve always been one of those guys who wished that people would stop trying to “fix” things that aren’t broken. ;-)

But in seriousness, there have been times I wished it were easier to track responses to requests with their responses.  This would eliminate the need for the server to treat all traffic as a strict FIFO,  But this is a very minor thing.

Development aside, what do you use IRC for in your leisure time and which networks do you frequent?

I use EFnet and Undernet primarily.  The main epic channel is on EFnet and has been there continuously since 1997.  We have an emergency backup epic
channel on just in case something happens to EFnet.  I also visit wasteland on undernet, mostly because I know many people there.

There are numerous topics, polls and postings about a possible decline of IRC – what do you think about that and where do you think is IRC heading in the long term?

I think IRC will always have a place because it is an open system that is uniquely suited to certain types of people.  As long as there are two people who want to use irc (and I’ll be one of them), there will always be an irc. Whether other people don’t want to use irc any more is no biggie to me because I can’t ever expect to make friends with millions of people, but I tell you that the probabilities are a lot higher for me on irc than off irc.

What are your future plans for EPIC5?

The immediate project is to try to add support for unicode/utf8 so people can talk to others on channels where they use utf8. ircII clients have always assumed that everybody uses 8 bit code pages, which is a relic of 10 years ago. Sometimes it’s hard to break with the past.

Thank you very much for the interview – any last words to our readers?

Remember, irc is meant to be enjoyed, so just have fun and don’t lose perspective on things!

Many thanks to hop for this really insightful interview and also thanks to Zilog for the tip regarding the EPIC release!

Your email address will not be published. Required fields are marked *