:lol:Quote:
Originally Posted by me
Printable View
:lol:Quote:
Originally Posted by me
Thats an awesome setup, but I don't see how we would be able to collect $90. Any ideas?Quote:
Originally Posted by Datacide
Out copmany name will be CodeMonkey I think (like penagate said).
Click this link to check your private messages Datacide: PM Inbox. Then reply to the message I sent you.
I agree. A little less grey (SLIGHTLY more blue) would be good. Thanks again penagate.Quote:
Originally Posted by wossface
These ones look good...
Quote:
File > New Source File: (3)
Edit > Goto: (3)
Edit > Indent/Unindent: (3)
View > Line Numbers: (1)
Project > Statistics: (2)
Run > View/Edit Assembly: (2)
Run > Compile .EXE: (1)
Tools > Options...: (3)
Help > Contents/Search: (1)
Help > about: (1)
Thats an awesome setup, but I don't see how we would be able to collect $90. Any ideas?Quote:
Originally Posted by Datacide
Out copmany name will be CodeMonkey I think (like penagate said).
Click this link to check your private messages Datacide: PM Inbox. Then reply to the message I sent you.
I agree. A little less grey (SLIGHTLY more blue) would be good. Thanks again penagate.Quote:
Originally Posted by wossface
Jake, can I get you to vote on the menu icons you like?
eyeRmonkey, do you have a nice splash screen to go with the IDE?
As for the logo's, I can't decide! They are all looking pretty sharp!
If this is supposed to be an open-source project, you might want to register it at SourceForge instead. You get web space with PHP and MySQL, a source control system, a bug tracking system, a forum, worldwide download mirrors, all for free, provided that your source is released under an open-source license.
No, I will just use whatever we decide on for the logo. I will have penagate make a fancier larger version for the splash. I think we are really close to deciding on a logo.Quote:
Originally Posted by Jacob Roman
Jake, I want you to vote on the icons for the menus. Go back to the last page to see the images.. Dglienna, penagate, and {yak} all voted. Follow their lead on what to do.
I was planning on doing that later this week. But I think we should have an acutal website as well. Thanks for the idea though CornedBee! I'll look into it more.Quote:
Originally Posted by CornedBee
The thing about SourceForge is people can rape the code, put thier name on it and sell it. I think the way the Fedora Project does it is good. Have it open source but not totally available to the world.
eR, send me what you want me to stick up.
Does anyone have a preference on the extension we use for LightFusuion files. I was thinking of this:
*.lfs - LightFusion Source File
*.lfp - LightFusion Project File
*.lfw - LightFusion Window (form)
Also, I want to make a gmail account for LightFusion. LightFusion@gmail is already taken so I was thinking of [email protected]. Does that sound good?
Datacide, I don't have anything ready to go yet. You can do whatever you want with it for now. If someone wants to be lame and sell LF as their own then so be it. I think SourceForge is the way to go, but I will look into the Fedora Project.
Is anyone good at writing legal stuff?
We need a license for LF before I can sign up for SourceForge. Is there a template for open source licenses that I can find somewhere? CornedBee, do you have any inut on this?
You don't usually write your own license. You just select one of the OSI-approved templates.
http://www.opensource.org/licenses/
Quote:
Originally Posted by eyeRmonkey
You need to make it either one of these for gmail:
Light_Fusion
LightFusion_Team
Light_Fusion_Team
LightFusion_Project
Light_Fusion_Project
I don't understand why you aren't using tools like flex and bison to create your compiler; It would greatly simplify the entire process. You can describe terminal tokens using regular expressions for flex, which generates a parser, then use a BNF-like syntax to describe the grammar and actions to be taken in bison.
Well I was hoping to create my own as a great learning experience for me. That, and output SSE assembly rather than regular x86 assembly for the .obj file. The real challenge that I have yet to face is the linker. If I cannot pull it off on my own, any free distributable linker that you know is available will be a great help.
Are they free tools?
[email protected] is now set up. I am working on making a sourceforge account.
If I only had a computer to work on my project. :(
I feel like I'm so far behind. :cry:
Search google for GNU then search GNU for linker.Quote:
Originally Posted by Jacob Roman
Why are you working on a linker before you even know what is going on with the compiler?
Its ok buddy. :) Cheer up.Quote:
Originally Posted by Jacob Roman
Do you have an ETA on your computer? Why can't you install stuff on the comp you are on right now?
Thanks to CornedBee, I have been looking around here: http://www.opensource.org/licenses/.
I have a lot of reading to do, but here are the licenses I am currently planning on reading and considering:
BSD
Mozilla 1.1
MIT
GNU Public License (GPL)
Common Development and Disitribution License (CDDL)
W3C
So far it has been hard to get feedback on things as simple as icons, but I woul REALLY appriciate it if someone could read some licenses and give me their opinon on which one(s) are best for our situation. Especially Jake, Penagate or CornedBee. I will probably read all the ones I just listed and narrow down the list though.
I plan on making the compiler and linker on C++ but this blew my mind right here, and it was done in VB6:
http://www.planet-source-code.com/vb...62454&lngWId=1
That alone should help be get a linker going after I convert it to C++. :)
Take a look at the linker module:
VB Code:
Option Explicit Enum ApplicationType Console = 3 GUI = 2 End Enum Public Passes As Integer Public LinkCode() As Byte Public SectionSize As Long Public AppType As ApplicationType Sub InitLinker() ReDim LinkCode(0) As Byte InitDOSHeader InitDOSStub InitPEHeader InitSectionTable InitRawData InitCodeSection InitImportSection End Sub Function CheckSectionSize() As Boolean Dim i As Integer Dim cSize As Long Dim Value As Long Value = UBound(CodeSection) If Value < UBound(DataSection) Then Value = UBound(DataSection) If Value < UBound(ImportSection) Then Value = UBound(ImportSection) For i = 0 To Value Step 512 cSize = cSize + 2 Next i If SectionSize < cSize Then SectionSize = cSize Passes = Passes + 1 CheckSectionSize = True Exit Function End If CheckSectionSize = False End Function Sub InitDOSHeader() AddLinkByte &H4D, &H5A, &H80, &H0, &H1, &H0, &H0, &H0, &H4, &H0, &H10, &H0, &HFF, &HFF, &H0, &H0 AddLinkByte &H40, &H1, &H0, &H0, &H0, &H0, &H0, &H0, &H40, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H80, &H0, &H0, &H0 End Sub Sub InitDOSStub() AddLinkByte &HE, &H1F, &HBA, &HE, &H0, &HB4, &H9, &HCD, &H21, &HB8, &H1, &H4C, &HCD, &H21, &H74 AddLinkByte &H68, &H69, &H73, &H20, &H70, &H72, &H6F, &H67, &H72, &H61, &H6D, &H20, &H63, &H61 AddLinkByte &H6E, &H6E, &H6F, &H74, &H20, &H62, &H65, &H20, &H72, &H75, &H6E, &H20, &H69, &H6E AddLinkByte &H20, &H44, &H4F, &H53, &H20, &H6D, &H6F, &H64, &H65, &H2E, &HD, &HA, &H24, &H0, &H0 AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0 End Sub Sub InitPEHeader() 'Signature = "PE" AddLinkByte &H50, &H45, &H0, &H0 'Machine 0x014C;i386 AddLinkByte &H4C, &H1 'NumberOfSections = 3 AddLinkByte &H3, &H0 'TimeDateStamp AddLinkByte &H0, &H0, &H0, &H0 'PointerToSymbolTable = 0 AddLinkByte &H0, &H0, &H0, &H0 'NumberOfSymbols = 0 AddLinkByte &H0, &H0, &H0, &H0 'SizeOfOptionalHeader AddLinkByte &HE0, &H0 'Characteristics AddLinkByte &H8F, &H81 'Magic AddLinkByte &HB, &H1 'MajorLinkerVersion AddLinkByte &H1 'MinerLinkerVersion AddLinkByte &H0 'SizeOfCode AddLinkByte &H0, &H0, &H0, &H0 'SizeOfInitializedData AddLinkByte &H0, &H0, &H0, &H0 'SizeOfUnInitializedData AddLinkByte &H0, &H0, &H0, &H0 'AddressOfEntryPoint AddLinkByte &H0, &H20, &H0, &H0 'BaseOfCode AddLinkByte &H0, &H0, &H0, &H0 'BaseOfData AddLinkByte &H0, &H0, &H0, &H0 'ImageBase AddLinkByte &H0, &H0, &H40, &H0 'SectionAlignment AddLinkByte &H0, &H10, &H0, &H0 'FileAlignment AddLinkByte &H0, &H2, &H0, &H0 'MajorOSVersion AddLinkByte &H1, &H0 'MinorOSVersion AddLinkByte &H0, &H0 'MajorImageVersion AddLinkByte &H0, &H0 'MinorImageVersion AddLinkByte &H0, &H0 'MajorSubSystemVerion AddLinkByte &H4, &H0 'MinorSubSystemVerion AddLinkByte &H0, &H0 'Win32VersionValue AddLinkByte &H0, &H0, &H0, &H0 'SizeOfImage AddLinkByte &H0, &H40, &H0, &H0 'SizeOfHeaders AddLinkByte &H0, &H2, &H0, &H0 'CheckSum AddLinkByte &H94, &H6B, &H0, &H0 'SubSystem = 2:GUI; 3:Console AddLinkByte AppType AddLinkByte &H0 'DllCharacteristics AddLinkByte &H0, &H0 'SizeOfStackReserve AddLinkByte &H0, &H10, &H0, &H0 'SizeOfStackCommit AddLinkByte &H0, &H10, &H0, &H0 'SizeOfHeapReserve AddLinkByte &H0, &H0, &H1, &H0 'SizeOfHeapRCommit AddLinkByte &H0, &H0, &H0, &H0 'LoaderFlags AddLinkByte &H0, &H0, &H0, &H0 'NumberOfDataDirectories AddLinkByte &H10, &H0, &H0, &H0 'Export_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Import_Table AddLinkByte &H0, &H30, &H0, &H0, &H80, &H0, &H0, &H0 'ReSource_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Exception_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Certificate_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Relocation_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Debug_Data AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Architecture AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Global_PTR AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'TLS_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Load_Config_Table AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'BoundImportTable AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'ImportAddressTable AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'DelayImportDescriptor AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'COMplusRuntimeHeader AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 'Reserved AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 End Sub Sub InitSectionTable() 'Section1 'Name = ".data" AddLinkByte &H2E, &H64, &H61, &H74, &H61, &H0, &H0, &H0 'VirtualSize 'AddLinkByte &H33, &H0, &H0, &H0 SizeOfRawData 1 'VirtualAddress AddLinkByte &H0, &H10, &H0, &H0 'SizeOfRawData SizeOfRawData 1 'PointerToRawData PointerToRawData 1, SectionSize 'PointerToRelocations AddLinkByte &H0, &H0, &H0, &H0 'PointerToLinenumbers AddLinkByte &H0, &H0, &H0, &H0 'NumberOfRelocations AddLinkByte &H0, &H0 'NumberOfLinenumbers AddLinkByte &H0, &H0 'Characteristics AddLinkByte &H40, &H0, &H0, &HC0 'Section2 'Name = ".code" AddLinkByte &H2E, &H63, &H6F, &H64, &H65, &H0, &H0, &H0 'VirtualSize SizeOfRawData 2 'AddLinkByte &H1C, &H0, &H0, &H0 'VirtualAddress AddLinkByte &H0, &H20, &H0, &H0 'SizeOfRawData SizeOfRawData 2 'PointerToRawData PointerToRawData 2, SectionSize 'PointerToRelocations AddLinkByte &H0, &H0, &H0, &H0 'PointerToLinenumbers AddLinkByte &H0, &H0, &H0, &H0 'NumberOfRelocations AddLinkByte &H0, &H0 'NumberOfLinenumbers AddLinkByte &H0, &H0 'Characteristics AddLinkByte &H20, &H0, &H0, &H60 'Section3 'Name = ".idata" AddLinkByte &H2E, &H69, &H64, &H61, &H74, &H61, &H0, &H0 'VirtualSize SizeOfRawData 3 'AddLinkByte &H80, &H0, &H0, &H0 'VirtualAddress AddLinkByte &H0, &H30, &H0, &H0 'SizeOfRawData SizeOfRawData 3 'PointerToRawData PointerToRawData 3, SectionSize 'PointerToRelocations AddLinkByte &H0, &H0, &H0, &H0 'PointerToLinenumbers AddLinkByte &H0, &H0, &H0, &H0 'NumberOfRelocations AddLinkByte &H0, &H0 'NumberOfLinenumbers AddLinkByte &H0, &H0 'Characteristics AddLinkByte &H40, &H0, &H0, &HC0 AddLinkByte &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0 End Sub Sub InitRawData() Dim i As Long Dim SizeOfData As Long SizeOfData = UBound(DataSection) For i = SizeOfData To (256 * SectionSize) - 1 AddDataByte &H0 Next i For i = 1 To UBound(DataSection) AddLinkByte DataSection(i) Next i End Sub Sub InitCodeSection() Dim i As Long Dim SizeOfCode As Long SizeOfCode = UBound(CodeSection) For i = SizeOfCode To (256 * SectionSize) - 1 AddCodeByte &H0 Next i For i = 1 To UBound(CodeSection) AddLinkByte CodeSection(i) Next i End Sub Sub InitImportSection() Dim i As Long Dim SizeOfImport As Long OutputImportTable SizeOfImport = UBound(ImportSection) For i = SizeOfImport To (256 * SectionSize) - 1 AddImportByte &H0 Next i For i = 1 To UBound(ImportSection) AddLinkByte ImportSection(i) Next i End Sub Sub SizeOfRawData(Section As Long) AddLinkDWord CLng(("&H" & Hex(SectionSize))) * &H100 End Sub Sub PointerToRawData(Section As Integer, SizeB As Long) Dim i As Integer Dim Value As Long Value = 2 For i = 2 To Section Value = Value + SizeB Next i AddLinkDWord CLng("&H" & Hex(Value * &H100)) End Sub Sub Link(sFile As String, Run As Boolean) Dim i As Double If AppType = 0 Then InfMessage "application type not specified. compiling process failed." Exit Sub End If On Error GoTo LinkFail If Dir(sFile) <> "" Then Kill sFile Open sFile For Binary As #1 For i = 1 To UBound(LinkCode) Put #1, , LinkCode(i) Next i Close #1 InfMessage "application compiled. " & vbCrLf & _ Passes & " pass(es). " & UBound(LinkCode) & " bytes written." If Run = True Then ShellExecute 0, "open", sFile, "", "C:\", 1 Exit Sub LinkFail: InfMessage "linking process failed. unknown reason." End Sub Sub AddLinkDWord(Value As Long) AddLinkWord LoWord(Value) AddLinkWord HiWord(Value) End Sub Sub AddLinkWord(Value As Integer) AddLinkByte LoByte(Value), HiByte(Value) End Sub Sub AddLinkByte(ParamArray Bytes() As Variant) Dim i As Integer For i = 0 To UBound(Bytes) ReDim Preserve LinkCode(UBound(LinkCode) + 1) As Byte LinkCode(UBound(LinkCode)) = Bytes(i) Next i End Sub
Because there would be no point on making a compiler if I got no exe to use the code on. Besides, it should be simple to make a linker now that I got some code to work with :)Quote:
Originally Posted by eyeRmonkey
I have decided to use the GNU Public License (GPL). If anyone wants to read it feel free, but I am sure you will all agree it is the best to use.Quote:
Originally Posted by eyeRmonkey
Jake & Penagate, when you start writing code we need to include a line at the top of all our source docuements stating the copyright, the no-warranty line and a couple other short lines. I will put it together and post it sometime soon.
Well I wanna test something in vb6 before converting it to C++. I'm practically putting together an exe using machine code! :eek:
But the copyright info will be in when I do ;)
I just submitted our applicaiton to SourceForge.Net for review. Here is what I put as the description (the part that will be reviewed before I project is accepted):
LightFusion will be a programming language, a compiler, and an IDE all in one. The goal of this project is to allow users to compile fast programs. The syntax will be similar to that of C++ and Visual Basic with some changes.
LightFusion will attempt to provide users with all the tools necessary to create a functional program (.exe) for Windows platforms. What makes it stand out is that it will be easy to use, but offer lots of power to advanced programmers. An example of this is that we plan on making windows (forms) easy to create (as they are in Visual Basic), but allow users to customize them (like in C++).
Supported OS:
* Windows XP and greater. Possibly other NT systems, but we are unsure at this point.
Languages Used:
* The IDE will be written in Visual Basic 6.
* The compiler/linker will be written in C++/Assembly.
* The libraries will be written in assembly.
Obstacles:
* Making a compiler that can create fast code and making an IDE that will allow users to make programs with extreme ease.
Major Features:
* Easy to use IDE
* Compiler with advanced optimizations
* Making programming easy for people who are new to it, but allow a lot of power for advanced users
Existing Work:
* The project is in very early development at this point and the only code we have written is the basis of the IDE.
* The team of people working on it met at http://www.vbforums.com
* The current forum thread on the development of the project can be found at: http://www.vbforums.com/showthread.p...9&page=1&pp=40
* The small amount of code that is already available for the IDE is not available because we have no where to host it.
Thank you for taking the time to review our application.
I have no opinions on the IDE icons. Quite honestly, I find it rather absurd that you're worrying about which icons to use, when you still have no proper and thorough concept for the language.
i agree that the GPL is the best licence for this...
probably one of the main reasons that Linux is as good as it is.
the GPL version 3 should be coming out soon.
you didnt think of using [email protected]?Quote:
Originally Posted by eyeRmonkey
some links for Bison and Flex:Quote:
Originally Posted by sunburnt
http://www.gnu.org/software/bison/bison.html
http://www.gnu.org/software/flex/
You can perform any action you want in a bison handler -- for example, in my current project the bison-generated parser builds a parse tree representing the program, which can be transversed in order to perform type checking, generate the assembly output, etc.Quote:
Originally Posted by Jacob Roman
Example:
Given the input:
a human-readable output (minus some attributes on the tree )would look like this:Code:function :integer: main( )
{
var :string: str = "hello world";
write str;
}
Code:Starting parsing...
Parsing and decoration OK.
==><program>
|Errors| 0
|LHS| 0
|Line| 1
|RHS| 1
==><defnlist>
|Errors| 0
|LHS| 5
|Line| 1
|RHS| 8
==><defnlist>
|Errors| 0
|LHS| 5
|Line| 0
|RHS| 0
==><defn>
|Errors| 0
|LHS| 4
|Line| 1
|RHS| 7
==><functiondefn>
|Depth| 0
|Errors| 0
|LHS| 7
|Line| 1
|RHS| 38
==>FUNCTION
|Errors| 0
|Lexeme| function
|Line| 1
|Token number| 263
==><type>
|Errors| 0
|LHS| 14
|Line| 1
|RHS| 60
==>TYPENAME
|Errors| 0
|Lexeme| :integer:
|Line| 1
|Token number| 300
==>IDENTIFIER
|Definition| 0x3dc270
|Errors| 0
|Lexeme| main
|Line| 1
|Token number| 299
==>LEFTPARENTHESIS
|Errors| 0
|Lexeme| (
|Line| 1
|Token number| 293
==><parlist>
|Errors| 0
|LHS| 8
|Line| 0
|RHS| 0
==>RIGHTPARENTHESIS
|Errors| 0
|Lexeme| )
|Line| 1
|Token number| 294
==><blockstmt>
|Errors| 0
|LHS| 3
|Line| 2
|RHS| 5
==>OPENBLOCK
|Errors| 0
|Lexeme| {
|Line| 2
|Token number| 289
==><defnlist>
|Errors| 0
|LHS| 5
|Line| 3
|RHS| 8
==><defnlist>
|Errors| 0
|LHS| 5
|Line| 0
|RHS| 0
==><defn>
|Errors| 0
|LHS| 4
|Line| 3
|RHS| 6
==><variabledefn>
|Depth| 1
|Errors| 0
|LHS| 15
|Line| 3
|Offset| -4
|RHS| 62
==>VAR
|Errors| 0
|Lexeme| var
|Line| 3
|Token number| 270
==><type>
|Errors| 0
|LHS| 14
|Line| 3
|RHS| 60
==>TYPENAME
|Errors| 0
|Lexeme| :string:
|Line| 3
|Token number| 300
==>IDENTIFIER
|Definition| 0x3db168
|Errors| 0
|Lexeme| str
|Line| 3
|Token number| 299
==>ASSIGN
|Errors| 0
|Lexeme| =
|Line| 3
|Token number| 295
==><expr>
|Errors| 0
|LHS| 6
|Line| 3
|RHS| 10
|Type| 0x3d27c0
==>STRINGVALUE
|Errors| 0
|Lexeme| "hello world"
|Line| 3
|Token number| 301
==>SEMICOLON
|Errors| 0
|Lexeme| ;
|Line| 3
|Token number| 297
==><stmtlist>
|Errors| 0
|LHS| 13
|Line| 5
|RHS| 55
==><stmtlist>
|Errors| 0
|LHS| 13
|Line| 0
|RHS| 0
==><statement>
|Errors| 0
|LHS| 12
|Line| 5
|RHS| 45
==>WRITE
|Errors| 0
|Lexeme| write
|Line| 5
|Token number| 272
==><expr>
|Errors| 0
|LHS| 6
|Line| 5
|RHS| 12
|Type| 0x3daf78
==>IDENTIFIER
|Definition| 0x3db168
|Errors| 0
|Lexeme| str
|Line| 5
|Token number| 299
==>SEMICOLON
|Errors| 0
|Lexeme| ;
|Line| 5
|Token number| 297
==>CLOSEBLOCK
|Errors| 0
|Lexeme| }
|Line| 6
|Token number| 290
Can you elaborate on why you still think we have no proper concept for our language? I alone have been working hard on the syntax since I'm working on the compiler and all. A lot of it ended up on a note pad (a real note pad) since I can't get on the computer much until mine gets built.Quote:
Originally Posted by CornedBee
Syntax is not concept. I listed the main points of design for C++ a while ago, and I haven't seen anything on this thread that resembles similar planning.
Actually we already had a lot of it written in one of these pages. I don't think it was complete though.
I'm sorry to say but you will not be able to post this project under the GPL license if you will use the CodeSense control.
There are a bunch of Licensings we can use or we can make our ow.Quote:
The concept of "Open Source" promotes the benefits of collaborative development by ensuring that potential end-users are able to obtain and use software, and that the software may be improved and expanded to meet the needs of its users. Collaboration within the Open Source community (developers and end-users) promotes a higher standard of quality, and helps to ensure the long-term viability of both data and applications.
Open source doesn't just mean access to the source code. The distribution terms of open-source software must comply with the following criteria:
1. Free Redistribution
The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale.
Rationale: By constraining the license to require free redistribution, we eliminate the temptation to throw away many long-term gains in order to make a few short-term sales dollars. If we didn't do this, there would be lots of pressure for cooperators to defect.
2. Source Code
The program must include source code, and must allow distribution in source code as well as compiled form. Where some form of a product is not distributed with source code, there must be a well-publicized means of obtaining the source code for no more than a reasonable reproduction cost–preferably, downloading via the Internet without charge. The source code must be the preferred form in which a programmer would modify the program. Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed.
Rationale: We require access to un-obfuscated source code because you can't evolve programs without modifying them. Since our purpose is to make evolution easy, we require that modification be made easy.
3. Derived Works
The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software.
Rationale: The mere ability to read source isn't enough to support independent peer review and rapid evolutionary selection. For rapid evolution to happen, people need to be able to experiment with and redistribute modifications.
4. Integrity of The Author's Source Code
The license may restrict source-code from being distributed in modified form only if the license allows the distribution of "patch files" with the source code for the purpose of modifying the program at build time. The license must explicitly permit distribution of software built from modified source code. The license may require derived works to carry a different name or version number from the original software.
Rationale: Encouraging lots of improvement is a good thing, but users have a right to know who is responsible for the software they are using. Authors and maintainers have reciprocal right to know what they're being asked to support and protect their reputations.
Accordingly, an open-source license must guarantee that source be readily available, but may require that it be distributed as pristine base sources plus patches. In this way, "unofficial" changes can be made available but readily distinguished from the base source.
5. No Discrimination Against Persons or Groups
The license must not discriminate against any person or group of persons.
Rationale: In order to get the maximum benefit from the process, the maximum diversity of persons and groups should be equally eligible to contribute to open sources. Therefore we forbid any open-source license from locking anybody out of the process.
Some countries, including the United States, have export restrictions for certain types of software. An OSD-conformant license may warn licensees of applicable restrictions and remind them that they are obliged to obey the law; however, it may not incorporate such restrictions itself.
6. No Discrimination Against Fields of Endeavor
The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.
Rationale: The major intention of this clause is to prohibit license traps that prevent open source from being used commercially. We want commercial users to join our community, not feel excluded from it.
7. Distribution of License
The rights attached to the program must apply to all to whom the program is redistributed without the need for execution of an additional license by those parties.
Rationale: This clause is intended to forbid closing up software by indirect means such as requiring a non-disclosure agreement.
8. License Must Not Be Specific to a Product
The rights attached to the program must not depend on the program's being part of a particular software distribution. If the program is extracted from that distribution and used or distributed within the terms of the program's license, all parties to whom the program is redistributed should have the same rights as those that are granted in conjunction with the original software distribution.
Rationale: This clause forecloses yet another class of license traps.
9. License Must Not Restrict Other Software
The license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open-source software.
Rationale: Distributors of open-source software have the right to make their own choices about their own software.
Yes, the GPL is conformant with this requirement. Software linked with GPLed libraries only inherits the GPL if it forms a single work, not any software with which they are merely distributed.
10. License Must Be Technology-Neutral
No provision of the license may be predicated on any individual technology or style of interface.
Rationale: This provision is aimed specifically at licenses which require an explicit gesture of assent in order to establish a contract between licensor and licensee. Provisions mandating so-called "click-wrap" may conflict with important methods of software distribution such as FTP download, CD-ROM anthologies, and web mirroring; such provisions may also hinder code re-use. Conformant licenses must allow for the possibility that (a) redistribution of the software will take place over non-Web channels that do not support click-wrapping of the download, and that (b) the covered code (or re-used portions of covered code) may run in a non-GUI environment that cannot support popup dialogues.
GNU General Public License (GPL)
GNU Library or Lesser Public License (LGPL)
BSD License
MIT License
Artistic License
Mozilla Public License 1.0 (MPL)
Qt Public License (QPL)
IBM Public License
MITRE Collaborative Virtual Workspace License (CVW License)
Ricoh Source Code Public License
Python License (CNRI Python License)
Python Software Foundation License
zlib/libpng License
Apache Software License
Vovida Software License 1.0
Sun Industry Standards Source License (SISSL)
Intel Open Source License
Mozilla Public License 1.1 (MPL 1.1)
Jabber Open Source License
Nokia Open Source License
Sleepycat License
Nethack General Public License
Common Public License
Apple Public Source License
X.Net License
Sun Public License
Eiffel Forum License
W3C License
Motosoto License
Open Group Test Suite License
Zope Public License
Uh oh. I should have ran that by you shouldn't I JA.... I'll contact you.
Jake, could you please spend a LOT of time researching flex and bison. I thinkt hey might be just what we need.
I will re-post out current list (that ressembles the C++ list you posted) in a couple days after I get the SourceForge and licensing stuff figured out. I have to find out if the GPL allows me to distribute non-open source DLLs and OCXs with my program. If not, then we need a new license.Quote:
Originally Posted by CornedBee